【发布时间】:2019-01-24 00:21:41
【问题描述】:
我有一个从 .cer 文件生成公钥的方法。我将 .cer 文件内容转换为输入流,一旦获得流,我就会调用此方法来生成公钥
public static void generatePublicKey(InputStream inputStream) {
try {
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509", "BC");
Certificate certificate = certificateFactory.generateCertificate(inputStream);
publicKey = certificate.getPublicKey();
inputStream.close();
} catch (CertificateException | IOException e) {
e.printStackTrace();
}
}
在我们将项目更新为以 Android Pie 为目标之前,它一直有效。看起来 google 不推荐使用 BC 提供程序,这就是导致问题的原因。如果我在 getInstance() 中使用“BC”,我会得到 NoSuchAlgorithmException。如果我删除“BC”并通过CertificateFactory.getInstance("X.509"),这是谷歌在https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html 建议的方法
我明白了
com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: java.lang.RuntimeException: error:0c0000be:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG
【问题讨论】:
-
您找到解决方案了吗?我也遇到了同样的问题。
标签: java android ssl-certificate x509certificate public-key-encryption