在r146之前的版本中,可以直接創建X509Certificate
對象。 現在API已被棄用,並且新的只傳遞一個X509CertificateHolder
對象。Bouncycastle:X509CertificateHolder到X509Certificate?
我找不到將X509CertificateHolder
轉換爲X509Certificate
的方法。
這怎麼辦?
在r146之前的版本中,可以直接創建X509Certificate
對象。 現在API已被棄用,並且新的只傳遞一個X509CertificateHolder
對象。Bouncycastle:X509CertificateHolder到X509Certificate?
我找不到將X509CertificateHolder
轉換爲X509Certificate
的方法。
這怎麼辦?
我會回答我自己的問題,但不能刪除,以防其他人得到了相同的問題:
return new JcaX509CertificateConverter().setProvider("BC")
.getCertificate(certificateHolder);
而且屬性證書:
return new X509V2AttributeCertificate(attributeCertificateHolder.getEncoded());
不是很好,因爲它是編碼和解碼,但它的工作原理。
卓越的參考。謝謝。 – 2012-12-11 15:08:18
現在不建議使用X509V2AttributeCertificate。我不確定要使用什麼或如何解析。不推薦使用X509AttrCertParser,但engineRead()返回已棄用的X509V2AttributeCertificate。 – 2016-02-24 12:14:19
我想你應該刪除'.setProvider(「BC」)'方法調用,因爲它不是必須的。 – 2017-09-13 18:03:17
另一種選擇是這一個:)
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(certificateHolder.getEncoded());
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);
太冗長了,@SteffenHeil答案似乎是最「標準」的方法。 – 2017-09-13 18:02:10
這是一個可能性,以獲得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());
........
你應該添加一些解釋。 – 2017-06-30 10:22:53
你有一個鏈接到在線API文檔? – 2011-06-16 13:35:29
謝謝,Steffen。這非常有幫助。 – Martynas 2011-11-13 13:44:34
@SteffenHeil,您應該在答案部分提供答案,以便我們可以將其標記爲已回答。 – Ben 2012-01-20 12:55:29