Bouncycastle:如何将X509CertificateHolder转换为X509Certificate?

50
在r146版本之前,可以直接创建 X509Certificate 对象。现在该API已被弃用,新API仅提供 X509CertificateHolder 对象。
我找不到将 X509CertificateHolder 转换为 X509Certificate 的方法。
这该怎么做呢?

1
你有在线API文档的链接吗? - Petey B
1
@SteffenHeil,您应该将答案放在答案部分,这样我们才能将其标记为已回答。 - Ben
3个回答

99

我会回答自己的问题,但不删除它,以防其他人遇到相同的问题:

return new JcaX509CertificateConverter().getCertificate(certificateHolder);

还有关于属性证书:

return new X509V2AttributeCertificate(attributeCertificateHolder.getEncoded());

虽然这种编码和解码方式不太好,但它是有效的。


非常好的参考资料。谢谢。 - HMM
1
X509V2AttributeCertificate现已弃用。我不确定该使用什么或如何解析。X509AttrCertParser未被弃用,但engineRead()返回的是一个已弃用的X509V2AttributeCertificate。 - Stealth Rabbi
我喜欢这个,因为它使用了纯Java方法。Steffen Heil的解决方案再次使用了BC,并且类名看起来可能会在将来更改。 - Maik

5
另一个选择是这个 :)
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(certificateHolder.getEncoded());
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);

1
太啰嗦了,@SteffenHeil的答案似乎是最“标准”的方法。 - Jaime Hablutzel

-1
这是一个将 X509CertificateHolder 转换为 X509Certificate 并获取 toString 的机会。(代码的第一句话无关紧要)
X509CertificateHolder selfSignedCertificate = CertificateUtils.selfSignCertificate(certificationRequest, keyPair.getPrivate());
byte[] content = selfSignedCertificate.getEncoded();
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(new ByteArrayInputStream(content));
logger.debug("cert: {}", cert.toString());

........


你应该添加一些解释。 - Cà phê đen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接