有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法从X509证书的X500主体获取UniqueIdentifier

我想使用Java获取X509证书的唯一标识符

我尝试使用以下代码获取值:-

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

但我无法单独获取唯一标识符值。这就是我得到的价值:-

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

我得到一个对象作为唯一标识符的值。我无法解析该对象,请获取该对象的值

更新:: 我仍然无法找到获取唯一标识符的方法。感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    您需要提供一组已知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,emailAddress=345345@dfgfd.pl
    

    当您为集合提供以下内容时:

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