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 namey valcapturando 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>"(?:[^"]|"")+"|[^,]+))