2012-05-03 121 views
3

我有一個byte[]的證書數據,我想將此byte[]類型更改爲Certificate類型。我怎樣才能做到這一點?如何將byte []類型轉換爲java中的證書類型?

現在我用CertificateFactory.generateCertificate(InputStream inStream)

byte[] csr = getCSR(cn, ou, org, loc, state, country,email); 
CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
ByteArrayInputStream bais = new ByteArrayInputStream(csr); 
Certificate certificate = cf.generateCertificate(bais); 

但是發生錯誤證書證書= cf.generateCertificate(BAIS);在這一行。

錯誤:java.security.cert.CertificateParsingException:java.io.IOException的:爲ObjectIdentifier() - 不是一個對象ID(標籤= 49)

爲什麼發生數據這個錯誤?這段代碼有什麼錯誤?請解釋我。謝謝。

+2

http://docs.oracle.com/javase/6/docs/api/java/security/cert/CertificateFactory.html – BalusC

回答

7

您可以使用CertificateFactory.generateCertificate(InputStream inStream)生成證書。

這裏是生成一個X509證書的例子:

CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
Certificate certificate = cf.generateCertificate(new ByteArrayInputStream(buf)); 
+0

現在,我就像這樣使用'CertificateFactory cf = CertificateFactory.getInstance(「X.509 「);證書= \t \t \t \t \t \t cf.generateCertificate(新ByteArrayInputStream的(字節陣列));'但是我已經錯誤** java.security.cert.CertificateFactory.generateCertificate(來源不明)**。請解釋我。謝謝。 –

+0

@shariphwar給出的異常類型,而不是它發生的地方(或兩者)將有所幫助... – Bruno

+0

錯誤:** java.security.cert.CertificateParsingException:java.io.IOException:ObjectIdentifier() - 數據不是對象ID(標記= 49)** –

2

我有同樣的錯誤,當我嘗試使用CertificateFactory.generateCertificate企業社會責任。 所以我認爲你的問題可能是一樣的;即您的字節數組不包含證書,但是證書籤名請求。 如果你真的需要閱讀證書籤名請求(像我一樣),使用下面的代碼(由http://www.journaldev.com/223/generating-a-certificate-signing-request-using-java-api啓發):

 
import sun.security.pkcs.PKCS10; 
... 
PKCS10 csr = new PKCS10(Base64Utils.decode(csrPem1.getBytes())); 

使用Base64Utils取決於輸入數據的格式。

相關問題