我使用 Bouncycastle 库通过 X509v3CertificateBuilder 类从 PKCS10 请求生成证书。
它返回构建一个包含生成的证书的 X509CertificateHolder 对象。
如果我在持有者上调用 getIssuer,它会以正确的顺序返回颁发者可分辨名称(如果我在颁发者证书上调用 getSubjectX500Principal() 则返回相同的名称),如果我使用 java CertificateFactory 解析持有者的编码版本,则 getIssuerX500Principal生成的证书的()方法以相反的顺序返回DN,有什么问题吗?
这是我想要做的示例代码:
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
由于我需要比较可分辨名称,因此我通过使用 LdapName 类解析 DN 并比较解析的 rdns 来解决:
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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)