Android 内验证Https证书问题

Android P移除BC相关的算法,可以使用AndroidOpenSSL
java.security.cert.CertificateException: X.509 not found
Caused by: java.security.NoSuchAlgorithmException: The BC provider no longer provides an implementation for CertificateFactory.X.509.  Please see https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html for more details.

CertificateFactory certificateFactory;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    //适配Android P及以后版本,否则报错NoSuchAlgorithmException
    certificateFactory = CertificateFactory.getInstance("X.509", "AndroidOpenSSL");//
} else {
    certificateFactory = CertificateFactory.getInstance("X.509", "BC");
}
//CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509","BC");//, "BC"
Logger.e("TAG", " certificates.length: " + certificates.length);


//CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate ca = certificateFactory.generateCertificate(certificates[0]);
pinningPublicKey = new BigInteger(1, ca.getPublicKey().getEncoded()).toString(16);
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
keyStore.setCertificateEntry("certificateAlias", ca);
for (InputStream certificate : certificates) {
    try {
        if (certificate != null)
            certificate.close();
    } catch (IOException e) {
    }
}
TrustManagerFactory trustManagerFactory = null;
trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();

 

java.security.cert.CertificateException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: inStream is empty
如果用Certificate ca = certificateFactory.generateCertificate(certificates[0]);的时候

再次keyStore.setCertificateEntry("certificateAlias", certificateFactory.generateCertificate(certificates[0]));就会出现上面错误

keyStore.setCertificateEntry("certificateAlias", ca); 就没有问题

顺带记录下问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值