2011-06-16 37 views
32

在r146之前的版本中,可以直接創建X509Certificate對象。 現在API已被棄用,並且新的只傳遞一個X509CertificateHolder對象。Bouncycastle:X509CertificateHolder到X509Certificate?

我找不到將X509CertificateHolder轉換爲X509Certificate的方法。

這怎麼辦?

+1

你有一個鏈接到在線API文檔? – 2011-06-16 13:35:29

+0

謝謝,Steffen。這非常有幫助。 – Martynas 2011-11-13 13:44:34

+1

@SteffenHeil,您應該在答案部分提供答案,以便我們可以將其標記爲已回答。 – Ben 2012-01-20 12:55:29

回答

61

我會回答我自己的問題,但不能刪除,以防其他人得到了相同的問題:

return new JcaX509CertificateConverter().setProvider("BC") 
    .getCertificate(certificateHolder); 

而且屬性證書:

return new X509V2AttributeCertificate(attributeCertificateHolder.getEncoded()); 

不是很好,因爲它是編碼和解碼,但它的工作原理。

+0

卓越的參考。謝謝。 – 2012-12-11 15:08:18

+0

現在不建議使用X509V2AttributeCertificate。我不確定要使用什麼或如何解析。不推薦使用X509AttrCertParser,但engineRead()返回已棄用的X509V2AttributeCertificate。 – 2016-02-24 12:14:19

+1

我想你應該刪除'.setProvider(「BC」)'方法調用,因爲它不是必須的。 – 2017-09-13 18:03:17

0

另一種選擇是這一個:)

CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 
InputStream in = new ByteArrayInputStream(certificateHolder.getEncoded()); 
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in); 
+0

太冗長了,@SteffenHeil答案似乎是最「標準」的方法。 – 2017-09-13 18:02:10

-1

這是一個可能性,以獲得X509CertificateHolderX509CertificatetoString。 (代碼的第一句話是無關緊要的)

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()); 

........

+0

你應該添加一些解釋。 – 2017-06-30 10:22:53

相關問題