Bouncycastle:X509CertificateHolder到X509Certificate?

Bouncycastle:X509CertificateHolder到X509Certificate?,certificate,deprecated,bouncycastle,x509,Certificate,Deprecated,Bouncycastle,X509,在r146之前的版本中,可以直接创建X509Certificate对象。 现在API已被弃用,新API只提供了一个X509CertificateHolder对象 我找不到将X509CertificateHolder转换为X509Certificate的方法 如何做到这一点?我会回答自己的问题,但不会删除,以防其他人遇到同样的问题: return new JcaX509CertificateConverter().setProvider( "BC" ) .getCertificate( cer

在r146之前的版本中,可以直接创建
X509Certificate
对象。 现在API已被弃用,新API只提供了一个
X509CertificateHolder
对象

我找不到将
X509CertificateHolder
转换为
X509Certificate
的方法


如何做到这一点?

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

return new JcaX509CertificateConverter().setProvider( "BC" )
  .getCertificate( certificateHolder );
属性证书:

return new X509V2AttributeCertificate( attributeCertificateHolder.getEncoded() );

不太好,因为它是编码和解码,但它可以工作。

另一个选项是:


这可以将
X509CertificateHolder
转换为
X509Certificate
toString
。(守则的第一句话无关紧要)


……您有联机API文档的链接吗?谢谢您,Steffen。这很有帮助。@SteffenHeil,你应该把答案放在答案部分,这样我们就可以把它标记为已回答。很好的参考资料。谢谢。X509V2AttributeCertificate现已弃用。我不确定使用什么或如何解析。X509AttrCertParser未被弃用,但engineRead()返回一个X509V2AttributeCertificate,该证书已被弃用。我认为您应该删除
.setProvider(“BC”)
方法调用,因为它不是严格要求的。您应该添加一些解释。太详细了,@SteffenHeil answer似乎是最“标准”的方法。
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(certificateHolder.getEncoded());
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);
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());