นี่คือวิธีดำเนินการโดยใช้ regex cert.getSubjectX500Principal().getName()
ในกรณีที่คุณไม่ต้องการพึ่งพา BouncyCastle
regex นี้จะแยกวิเคราะห์ชื่อที่แตกต่างการตั้งชื่อname
และval
กลุ่มการจับสำหรับแต่ละการแข่งขัน
เมื่อสตริง DN ประกอบด้วยเครื่องหมายจุลภาคพวกเขาควรจะถูกยกมา - regex นี้จัดการทั้งสตริงที่ยกมาและไม่ได้คำพูดอย่างถูกต้องและยังจัดการกับเครื่องหมายคำพูดที่ใช้ Escape ในสตริงที่ยกมา:
(?:^|,\s?)(?:(?<name>[A-Z]+)=(?<val>"(?:[^"]|"")+"|[^,]+))+
นี่คือรูปแบบที่สวยงาม:
(?:^|,\s?)
(?:
(?<name>[A-Z]+)=
(?<val>"(?:[^"]|"")+"|[^,]+)
)+
นี่คือลิงค์เพื่อให้คุณสามารถดูการทำงานได้:
https://regex101.com/r/zfZX3f/2
หากคุณต้องการให้ regex รับเฉพาะ CN เวอร์ชันที่ปรับแล้วนี้จะทำ:
(?:^|,\s?)(?:CN=(?<val>"(?:[^"]|"")+"|[^,]+))