Voici comment le faire en utilisant une regex over cert.getSubjectX500Principal().getName()
, au cas où vous ne voudriez pas prendre une dépendance sur BouncyCastle.
Cette regex analysera un nom distinctif, donnant name
et val
un groupe de capture pour chaque match.
Lorsque les chaînes DN contiennent des virgules, elles sont censées être entre guillemets - cette expression régulière gère correctement les chaînes entre guillemets et non, et gère également les guillemets échappés entre guillemets:
(?:^|,\s?)(?:(?<name>[A-Z]+)=(?<val>"(?:[^"]|"")+"|[^,]+))+
Voici bien formaté:
(?:^|,\s?)
(?:
(?<name>[A-Z]+)=
(?<val>"(?:[^"]|"")+"|[^,]+)
)+
Voici un lien pour que vous puissiez le voir en action:
https://regex101.com/r/zfZX3f/2
Si vous voulez qu'une regex n'obtienne que le CN, alors cette version adaptée le fera:
(?:^|,\s?)(?:CN=(?<val>"(?:[^"]|"")+"|[^,]+))