好的,这可能是一个非常愚蠢的问题,但是我使用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()
        );
    }
}

07-24 22:35