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 = 新しい PKCS10(Base64Utils.decode(csrPem1.getBytes()));

Base64Utils の使用は、入力データの形式によって異なります。

于 2012-06-06T16:22:15.867 に答える