首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X500Principal可分辨名称顺序

X500Principal可分辨名称顺序
EN

Stack Overflow用户
提问于 2012-06-04 00:18:39
回答 2查看 3.7K关注 0票数 5

我使用BouncyCastle库通过X509v3CertificateBuilder类从PKCS10请求中生成证书。

它返回build a X509CertificateHolder对象,其中包含生成的证书。如果我在持有者上调用getIssuer,它会以正确的顺序返回颁发者可分辨名称(如果我在颁发者证书上调用getSubjectX500Principal(),也会返回相同的顺序),如果我使用java CertificateFactory解析来自持有者的编码版本,则生成的证书的getIssuerX500Principal()方法会以相反的顺序返回DN,有什么问题吗?

下面是我要做的一个示例代码:

代码语言:javascript
复制
X509CertificateHolder holder = certBuilder.build(sigGen);
holder.getIssuer(); //Returns the DN in the correct order (same as in issuer cert)

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(holder.getEncoded()));

cert.getIssuerX500Principal().getName(); //Returns issuer DN in reverse order
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-06 22:20:38

因为我需要比较可分辨名称,所以我通过解析DN with LdapName类并比较解析后的rdns来解析:

代码语言:javascript
复制
boolean DNmatches(X500Principal p1, X500Principal p2) {
    List<Rdn> rdn1 = new LdapName(p1.getName()).getRdns();
    List<Rdn> rdn2 = new LdapName(p2.getName()).getRdns();

    if(rdn1.size() != rdn2.size())
        return false;

    return rdn1.containsAll(rdn2);
}
票数 7
EN

Stack Overflow用户

发布于 2021-04-09 00:29:07

为了防止任何人需要提取证书顺序中的主题DN,我发现这样做是可行的:

代码语言:javascript
复制
String certSubject = new JcaX509CertificateHolder(x509Certificate).getSubject().toString();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10871922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档