好的,这可能是一个非常愚蠢的问题,但是我使用bouncycastle通过以下方式从X509Certificate解析颁发者RDNS:
X500Name x500name = new JcaX509CertificateHolder(certificate).getIssuer();
RDN[] rdns = x500name.getRDNs();
for (int i = 0; i < rdns.length; ++i)
String readableString = IETFUtils.valueToString(rdns[i].getFirst().getType())
...
...但是我得到的只是一些ASN1 OID。
那么,有没有一种方法可以将ASN1ObjectIdentifier转换为可读字符串,例如“ CN”,“ OU”等...而不是OID?
谢谢!
最佳答案
看一下org.bouncycastle.asn1.x500.X500NameStyle及其实现。
X500NameStyle x500NameStyle = RFC4519Style.INSTANCE;
X500Name x500name = new JcaX509CertificateHolder( certificate ).getIssuer();
RDN[] rdns = x500name.getRDNs();
for ( RDN rdn : rdns ) {
for ( AttributeTypeAndValue attribute : rdn.getTypesAndValues() ) {
System.out.printf( "%s (%s) = %s%n",
x500NameStyle.oidToDisplayName( attribute.getType() ),
attribute.getType(),
attribute.getValue()
);
}
}