如何在java中将byte []类型转换为Certificate类型?

时间:2012-05-03 03:46:41

标签: java certificate bytearray

我有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);

但在此行发生错误证书证书= cf.generateCertificate(bais);

错误: java.security.cert.CertificateParsingException:java.io.IOException:ObjectIdentifier() - 数据不是对象ID(tag = 49)

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

2 个答案:

答案 0 :(得分:7)

您可以使用CertificateFactory.generateCertificate(InputStream inStream)生成证书。

以下是生成X509证书的示例:

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

答案 1 :(得分: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取决于输入数据的格式。