2014-03-25 13 views
0

好吧,這可能是一個非常愚蠢的問題,但我使用BouncyCastle的,以下列方式從X509證書分析發行人RDNS:轉換ASN1ObjectIdentifier Java中的可讀的字符串

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?

謝謝!

回答

1

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

太棒了!這正是我期待的!出於好奇,你是怎麼找到這個的? - 看着我無法自己的API – mdzh

0

使用

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

會給你更詳細的輸出比getIssuer()