2014-01-15 12 views
9

私はセキュリティで保護されたサーバーに接続している私のアンドロイドプロジェクトで次のコードを持っています。 解析エラーが発生します。誰もがこの例外について知っているなら、教えてください。前もって感謝します。

コードスニペット

CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
InputStream caInput = new BufferedInputStream(new FileInputStream("/storage/emulated/0/cert.p12")); 
Certificate ca; 
try { 
    ca = cf.generateCertificate(caInput); // error at this line 
    System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN()); 
} finally { 
    caInput.close(); 
}  

エラー

01-15 17:01:00.107: W/System.err(14932): java.security.cert.CertificateException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 
01-15 17:01:00.107: W/System.err(14932): at com.android.org.conscrypt.OpenSSLX509CertificateFactory.engineGenerateCertificate(OpenSSLX509CertificateFactory.java:272) 

01-15 17:01:00.107:をSystem.err/W(14932):java.security.cert.CertificateFactory.generateCertificateで( 0120-325-990)

+7

は(すなわち、 'のgetInstance( "X.509"、 "BC")はBouncyCastleプロバイダを試してみてください;'また、あなたのバージョンを確認してくださいたとえば、Androidがp12ファイルの証明書をx509に変換できない、Javaを使用して正しく変換する](https://groups.google.com/forum/#!topic/android-developers/HCiHwBKOsrI) 。 – jww

+0

@noloader、あなたのコメントは答えに値する。私はちょうど(BCプロバイダを追加する)それが働いた。それは他の人を助けるための答えとしてそれを追加する必要があります – fernandohur

+0

1.間違ったファイル形式に見えます。 threreはDERとPEMタイプです。あなたのcert.p12を別のフォーマットに変換しようとしてください($ x509 -in cert.p12 -inform PEM -out output.crt -outform D ER)。 –

答えて

0

2つの問題がある 1.ファイル形式が間違っているようです。 openssl threreにはDERとPEMがあります。 cert.p12を別の形式($ x509 -in cert.p12 -inform PEM -out output.crt -outform DER)に変換してみてください。 2.おそらくcert.p12はX509形式ではなく、pkcs12形式です。それらのフォーマットの詳細を読んで、ファイルを確認してください。

+0

このエラーはpemファイルでも発生します。理由は何でしょうか? –

8

私は "BC" プロバイダを含めるには、この行を変更し、エラーが消えた:getInstance("X.509", "BC")

+0

私にとって素晴らしい仕事をしました。 – March3April4

関連する問題