我使用BouncyCastle库通过X509v3CertificateBuilder类从PKCS10请求中生成证书。
它返回build a 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发布于 2012-06-06 22:20:38
因为我需要比较可分辨名称,所以我通过解析DN with LdapName类并比较解析后的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);
}发布于 2021-04-09 00:29:07
为了防止任何人需要提取证书顺序中的主题DN,我发现这样做是可行的:
String certSubject = new JcaX509CertificateHolder(x509Certificate).getSubject().toString();https://stackoverflow.com/questions/10871922
复制相似问题