A continuación, le mostramos cómo hacerlo usando una expresión regular cert.getSubjectX500Principal().getName()
, en caso de que no desee tomar una dependencia en BouncyCastle.
Esta expresión regular analizará un nombre distinguido, dando name
y val
capturando grupos para cada coincidencia.
Cuando las cadenas DN contienen comas, deben estar entrecomilladas: esta expresión regular maneja correctamente cadenas entre comillas y sin comillas, y también maneja comillas de escape en cadenas entre comillas:
(?:^|,\s?)(?:(?<name>[A-Z]+)=(?<val>"(?:[^"]|"")+"|[^,]+))+
Aquí está muy bien formateado:
(?:^|,\s?)
(?:
(?<name>[A-Z]+)=
(?<val>"(?:[^"]|"")+"|[^,]+)
)+
Aquí tienes un enlace para que puedas verlo en acción:
https://regex101.com/r/zfZX3f/2
Si desea que una expresión regular obtenga solo el CN, esta versión adaptada lo hará:
(?:^|,\s?)(?:CN=(?<val>"(?:[^"]|"")+"|[^,]+))