9

Java を使用して、外部から受け取った証明書を読み取ろうとしています。コードは次のエラーをスローしています。

java.lang.RuntimeException: java.security.cert.CertificateException: 初期化できません、java.io.IOException: DerValue コンストラクターに余分なデータが渡されました

コード:

FileInputStream ksfis = new FileInputStream(this.getCertificateFile());
ksbufin = new BufferedInputStream(ksfis);
certificate = (X509Certificate)
  CertificateFactory.getInstance("X.509").generateCertificate(ksbufin);

問題がコードにないことを確認するために、自己署名証明書を作成してコードで使用したところ、問題なく動作しました。システム キー チェーンに両方の証明書をインストールしましたが、どちらも有効です。Mac と Java 1.6 を使用しています。

外部パーティ証明書をロードするときに上記の例外が発生する理由は何ですか? 転送中に破損したと思いますか?もしそうなら、それはローカルシステムで有効として表示されるべきではありませんよね?

4

1 に答える 1

8

openssl を使用してこれを入力し、結果をインポートしてみてください。

openssl x509 -outform der -in certificate.pem -out certificate.der

または軽量 API で Java Bouncy Castle 機能を使用します。

http://www.bouncycastle.org/docs/pkixdocs1.5on/org/bouncycastle/openssl/PEMReader.html

結果を再度エンコードし"X509" CertificateBuilder、Java で を使用して JCE 定義の証明書を取得できます。

ByteArrayInputStream certStream  =  new ByteArrayInputStream(binaryCert);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(certStream);
于 2012-07-23T22:30:34.080 に答える