0

我想使用Java获取X509Certificate的唯一标识符。无法从X50Principal获取UniqueIdentifier X509Certificate

我试图使用下面的代码获得的价值: -

java.security.cert.X509Certificate certificate=// certificate object 
certificate.getSubjectX500Principal().getName(); 

,但我无法得到唯一标识符值alone.This是我得到的值: -

2.5.4.45=#0309000000db000000a01a,OU=06 

我想为“2.5.4.45”单独获取值。

我也尝试使用下面的代码来获取值: -

 String dn2 = certificate.getSubjectX500Principal().getName(); 
     LdapName ldapDN; 
     ldapDN = new LdapName(dn2); 

     for(Rdn rdn: ldapDN.getRdns()) { 
      System.out.println(rdn.getType() + " -> " + rdn.getValue());     
      if(rdn.getType().equalsIgnoreCase("2.5.4.45")){ 
       System.out.println(rdn.getValue()); 
      } 

我正在一个对象作为唯一标识符的值。我无法解析对象,为此获取值。

更新:: 我还是没能想出一个办法来获取唯一标识符identifer.Any帮助表示赞赏。

+0

任何帮助,非常感谢.. – Manu

+1

有点难以帮助 - 你可以提供问题证书 - 所以我们可以看到发生了什么?第一个怀疑是格式错误的主体字符串。 – oba

回答

0

您需要提供一组已知的OID。然后,您将获得DN字符串的人类可读值。定义OID时,已知OID的值将可读。例如:

Map<String, String> knownOids = new HashMap<String, String>(); 
    knownOids.put("2.5.4.45", "uniqueIdentifier"); 
    String humanReadableDN = certToken.getCertificate().getSubjectX500Principal().getName(X500Principal.RFC2253, knownOids); 

实例的OID库,你可以在这里找到:http://oid-info.com/get/2.5.4.45

例如,此:

CN=Krzysiek,1.2.840.113549.1.9.1=#160f3334353334354064666766642e706c 

将会被翻译成这样:

commonName=Krzysiek,[email protected] 

当你提供一套:

knownOids.put("1.2.840.113549.1.9.1", "emailAddress");