3

我有一个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() -- 数据不是对象 ID(标签 = 49)

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

4

2 回答 2

7

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

这是一个生成 X509 证书的示例:

CertificateFactory cf   = CertificateFactory.getInstance("X.509");
Certificate certificate = cf.generateCertificate(new ByteArrayInputStream(buf));
于 2012-05-03T03:52:45.390 回答
2

当我尝试在 CSR 上使用 CertificateFactory.generateCertificate 时,我遇到了同样的错误。所以我认为你的问题可能是一样的;即您的字节数组不包含证书,但证书签名请求。如果您确实需要阅读证书签名请求(就像我一样),请使用以下代码(受http://www.journaldev.com/223/generating-a-certificate-signing-request-using-java-api启发) :

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

使用 Base64Utils 取决于输入数据的格式。

于 2012-06-06T16:22:15.867 回答