Ось як це зробити, використовуючи регулярний вираз cert.getSubjectX500Principal().getName()
, якщо ви не хочете брати залежність від BouncyCastle.
Цей регулярний вираз проаналізує видатне ім'я, дасть групи name
та val
групи захоплення для кожного збігу.
Коли рядки DN містять коми, вони призначені для цитування - цей регулярний вираз правильно обробляє рядки, що цитують, і позбавляє лапок, а також обробляє екрановані лапки в рядках, що цитуються:
(?:^|,\s?)(?:(?<name>[A-Z]+)=(?<val>"(?:[^"]|"")+"|[^,]+))+
Ось добре відформатоване:
(?:^|,\s?)
(?:
(?<name>[A-Z]+)=
(?<val>"(?:[^"]|"")+"|[^,]+)
)+
Ось посилання, щоб ви могли бачити його в дії:
https://regex101.com/r/zfZX3f/2
Якщо ви хочете, щоб регулярний вираз отримував лише CN, це зробить ця адаптована версія:
(?:^|,\s?)(?:CN=(?<val>"(?:[^"]|"")+"|[^,]+))