我的android项目中有以下代码,我连接到安全服务器。 我收到了解析错误。 [粘贴到下面]。如果有人知道这个例外,请告诉我。提前谢谢。
代码段
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:W / System.err(14932):at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:195)
答案 0 :(得分:11)
我找到了同样问题的解决方案。在此代码行中包含“BC”提供程序,错误可能会消失:getInstance("X.509", "BC")
答案 1 :(得分:0)
有两个问题 1.似乎是一种错误的文件格式。对于openssl threre是DER和PEM类型。尝试将cert.p12转换为另一种格式($ x509 -in cert.p12 -inform PEM -out output.crt -outform DER)。 2.也许cert.p12不是X509格式,但pkcs12是。阅读有关这些格式的更多信息并检查您的文件。
答案 2 :(得分:0)
根据 this link,不推荐明确指定 BC 提供程序。 所以不幸的是,乔希的回答不再有效。