Berikut cara melakukannya menggunakan regex over cert.getSubjectX500Principal().getName()
, jika Anda tidak ingin bergantung pada BouncyCastle.
Regex ini akan mengurai nama yang dibedakan, memberi name
dan val
menangkap grup untuk setiap pertandingan.
Jika string DN berisi koma, itu dimaksudkan untuk dikutip - ekspresi reguler ini menangani string yang dikutip dan tidak dikutip dengan benar, dan juga menangani kutipan yang lolos dalam string yang dikutip:
(?:^|,\s?)(?:(?<name>[A-Z]+)=(?<val>"(?:[^"]|"")+"|[^,]+))+
Ini diformat dengan baik:
(?:^|,\s?)
(?:
(?<name>[A-Z]+)=
(?<val>"(?:[^"]|"")+"|[^,]+)
)+
Berikut tautannya sehingga Anda dapat melihatnya beraksi:
https://regex101.com/r/zfZX3f/2
Jika Anda ingin regex hanya mendapatkan CN, versi adaptasi ini akan melakukannya:
(?:^|,\s?)(?:CN=(?<val>"(?:[^"]|"")+"|[^,]+))