2012-05-03 90 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取决于输入数据的格式。

相关问题