【问题标题】:Bouncycastle: X509CertificateHolder to X509Certificate?Bouncycastle:X509CertificateHolder 到 X509Certificate?
【发布时间】:2011-09-16 06:08:05
【问题描述】:

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

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

如何做到这一点?

【问题讨论】:

  • 您有在线 API 文档的链接吗?
  • 谢谢你,史蒂芬。这很有帮助。
  • @SteffenHeil,您应该将答案放在答案部分,以便我们将其标记为已回答。

标签: certificate deprecated bouncycastle x509


【解决方案1】:

这是一种将X509CertificateHolder 转换为X509CertificatetoString 的可能性。 (代码第一句无关)

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" ) 方法调用,因为它不是严格要求的。
猜你喜欢
  • 2022-01-21
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 2011-03-24
  • 2023-03-04
相关资源
最近更新 更多