将ASN1ObjectIdentifier转换为Java中的可读字符串

时间:2014-03-25 09:57:20

标签: java x509certificate bouncycastle asn.1

好的,这可能是一个非常愚蠢的问题,但是我使用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转换为可读的字符串,例如&#34; CN&#34;,&#34; OU&#34;等...而不是OID?

谢谢!

2 个答案:

答案 0 :(得分:2)

查看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()
        );
    }
}

答案 1 :(得分:0)

使用

X500Name x500name = new JcaX509CertificateHolder(certificate).getSubject();

会为您提供比getIssuer()更详细的输出。