I am using a SslServerSocket
and client certificates and want to extract the CN from the SubjectDN from the client's X509Certificate
.
At the moment I call cert.getSubjectX500Principal().getName()
but this of course gives me the total formatted DN of the client. For some reason I am just interested in the CN=theclient
part of the DN. Is there a way to extract this part of the DN without parsing the String myself?
Could use cryptacular which is a Java cryptographic library build on top of bouncycastle for easy use.
Regex expressions, are rather expensive to use. For such a simple task it will probably be an over kill. Instead you could use a simple String split:
BC made the extraction much easier:
As an alternative to gtrak's code that does not need ''bcmail'':
@Jakub: I have used your solution until my SW had to be run on Android. And Android does not implement javax.naming.ldap :-(
You could try using getName(X500Principal.RFC2253, oidMap) or
getName(X500Principal.CANONICAL, oidMap)
to see which one formats the DN string best. Maybe one of theoidMap
map values will be the string you want.here is another way. the idea is that the DN you obtain is in rfc2253 format, which is the same as used for LDAP DN. So why not reuse the LDAP API?