好的,这可能是一个非常愚蠢的问题,但是我使用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?
谢谢!
答案 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()
更详细的输出。