2010-08-02 61 views

回答

58

當然。

證書對象可以由CertificateFactory的實例創建 - 特別是配置爲創建X509證書的實例。這可以像這樣創建:

CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 

然後,你需要通過它包含證書的字節的InputStream。你的答案

InputStream in = new ByteArrayInputStream(bytes); 
X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in); 
+0

感謝:這可以通過包裝你的字節數組在ByteArrayInputStream來實現。但是我在最後一行得到了「(java.security.cert.CertificateException)java.security.cert.CertificateException:無法解析證書:java.io.IOException:空輸入」。 InputStream不是空的,但它拋出異常 – 0bj3ct 2015-06-12 07:22:17

+1

同樣的事情發生在我身上,因爲我沒有仔細考慮我在做什麼。就我而言,這是因爲我試圖用keystore中的字節而不是密鑰庫中的證書來完成上述操作。從密鑰庫中提取證書,獲取編碼字節,然後處理這些是上面這個答案爲我工作的原因。 – 2015-11-13 22:12:14

+2

在我的情況下,問題是byte []是基於64編碼...錯誤消息是有點誤導性的「空輸入」。也許它可以幫助某人... – riskop 2016-06-09 15:17:39

-1
InputStream stream = null; 
byte[] bencoded = javax.xml.bind.DatatypeConverter.parseBase64Binary(x509CertificateStr); 

try { 
    CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 
    cert = (X509Certificate) certFactory.generateCertificate(stream); 

} catch (java.security.cert.CertificateException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

這個問題沒有提到base-64,並且'stream'的初始化丟失了。這段代碼會拋出一個'NullPointerException'。 – EJP 2016-03-23 11:51:05