【问题标题】:Unable to get UniqueIdentifier from X500Principal of X509Certificate无法从 X509Certificate 的 X500Principal 获取 UniqueIdentifier
【发布时间】:2016-01-01 07:43:39
【问题描述】:

我想使用 Java 获取 X509Certificate 的唯一标识符。

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

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

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

更新 :: 我仍然无法找到获取 UniqueIdentifier 标识符的方法。感谢任何帮助。

【问题讨论】:

  • 这里有点难以帮助 - 你能提供问题证书 - 这样我们就可以看到发生了什么?首先怀疑是格式错误的主体字符串。

标签: java cryptography certificate digital-signature x509certificate


【解决方案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");

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2015-11-02
    • 2011-11-23
    • 2013-12-15
    相关资源
    最近更新 更多