Bouncycastle:X509CertificateHolder 到 X509Certificate?
Posted
技术标签:
【中文标题】Bouncycastle:X509CertificateHolder 到 X509Certificate?【英文标题】:Bouncycastle: X509CertificateHolder to X509Certificate? 【发布时间】:2011-09-16 06:08:05 【问题描述】:在 r146 之前的版本中,可以直接创建 X509Certificate
对象。
现在该 API 已被弃用,新的 API 仅提供 X509CertificateHolder
对象。
我找不到将X509CertificateHolder
转换为X509Certificate
的方法。
如何做到这一点?
【问题讨论】:
您有在线 API 文档的链接吗? 谢谢你,史蒂芬。这很有帮助。 @SteffenHeil,您应该将答案放在答案部分,以便我们将其标记为已回答。 【参考方案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());
........
【讨论】:
你应该添加一些解释。【参考方案2】:另一个选项是这个:)
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(certificateHolder.getEncoded());
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);
【讨论】:
太冗长了,@SteffenHeil 的回答似乎是最“标准”的方法。【参考方案3】:我会回答我自己的问题,但不会删除它,以防其他人遇到同样的问题:
return new JcaX509CertificateConverter().setProvider( "BC" )
.getCertificate( certificateHolder );
对于属性证书:
return new X509V2AttributeCertificate( attributeCertificateHolder.getEncoded() );
不是很好,因为它是编码和解码,但它可以工作。
【讨论】:
优秀的参考。谢谢。 X509V2AttributeCertificate 现在已弃用。我不确定要使用什么或如何解析。 X509AttrCertParser 未弃用,但 engineRead() 返回一个已弃用的 X509V2AttributeCertificate。 我认为您应该删除.setProvider( "BC" )
方法调用,因为它不是严格要求的。以上是关于Bouncycastle:X509CertificateHolder 到 X509Certificate?的主要内容,如果未能解决你的问题,请参考以下文章
将消息和签名转换为 BouncyCastle CMSSignedData 对象
使用充气桥X509v3CertificateBuilder生成X509证书