Oto jak to zrobić, używając wyrażenia regularnego cert.getSubjectX500Principal().getName()
, na wypadek, gdybyś nie chciał przyjmować zależności od BouncyCastle.
To wyrażenie regularne przeanalizuje nazwę wyróżniającą, podając name
i val
przechwytuj grupy dla każdego dopasowania.
Kiedy łańcuchy DN zawierają przecinki, należy je cytować - to wyrażenie regularne poprawnie obsługuje zarówno cytowane, jak i niecytowane ciągi, a także obsługuje cudzysłowy w cudzysłowach:
(?:^|,\s?)(?:(?<name>[A-Z]+)=(?<val>"(?:[^"]|"")+"|[^,]+))+
Oto ładnie sformatowany:
(?:^|,\s?)
(?:
(?<name>[A-Z]+)=
(?<val>"(?:[^"]|"")+"|[^,]+)
)+
Oto link, dzięki któremu możesz zobaczyć to w akcji:
https://regex101.com/r/zfZX3f/2
Jeśli chcesz, aby wyrażenie regularne otrzymywało tylko CN, zrobi to ta dostosowana wersja:
(?:^|,\s?)(?:CN=(?<val>"(?:[^"]|"")+"|[^,]+))