我有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)
为什么会出现此错误?这段代码有什么问题?请解释一下。感谢。
答案 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取决于输入数据的格式。