如何在Java中将byte[]类型转换为证书类型?

4
我有一个证书数据的 byte[],我想将这个 byte[] 类型转换为 Certificate 类型。我该如何实现?
现在我使用了 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);

但是在这一行发生了错误 Certificate certificate = cf.generateCertificate(bais);

错误信息: java.security.cert.CertificateParsingException: java.io.IOException: ObjectIdentifier() -- data isn't an object ID (tag = 49)

为什么会出现这个错误?这段代码有什么问题?请解释一下。谢谢。


2
http://docs.oracle.com/javase/6/docs/api/java/security/cert/CertificateFactory.html - BalusC
2个回答

8

现在,我像这样使用 CertificateFactory cf = CertificateFactory.getInstance("X.509");Certificate certificate = cf.generateCertificate(new ByteArrayInputStream(byteArray)); 但是我遇到了错误 **java.security.cert.CertificateFactory.generateCertificate(Unknown Source)**。请解释一下。谢谢。 - Sharifah
@shariphwar 如果能给出异常类型而不仅仅是发生位置(或两者都有)会更有帮助... - Bruno
错误:java.security.cert.CertificateParsingException: java.io.IOException: ObjectIdentifier() -- 数据不是对象ID(标签=49) - Sharifah
我编辑了我的问题,请检查一下我的问题并回答我。谢谢。 - Sharifah
证书如果包含密码怎么办?这不会阻止读取吗? - manikanta nvsr

2
当我尝试在CSR上使用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取决于输入数据的格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接