我正在尝试将自签名证书导入受信任的证书,以便默认浏览器接受与使用它的网站的连接。
使用https://github.com/bitfireAT/cadroid中的代码,可以通过X509TrustManager#checkServerTrusted()
进行检查,该检查适用于API 23,但不适用于API 24/25(由targetSdkVersion
设置)。
public boolean isTrusted() throws NoSuchAlgorithmException, KeyStoreException {
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init((KeyStore) null);
X509TrustManager tm = (X509TrustManager) tmf.getTrustManagers()[0];
try {
tm.checkServerTrusted(certificates, certificates[0].getPublicKey().getAlgorithm());
return true;
} catch (CertificateException e) {
return false;
}
}
证书已成功导入并受信任(由浏览器验证/它显示在系统设置>安全> CA证书中),因此它不应抛出异常(并且不会在API 23上)。
我发现Android 7.0上的唯一变化是没有提及任何相关内容(https://developer.android.com/about/versions/nougat/android-7.0-changes.html#tls-ssl)。
任何想法,如何检查证书是否在API上受信任> 23?
答案 0 :(得分:0)
我刚刚找到https://stackoverflow.com/a/38770284/2170109来解决我的问题。
默认情况下,所有应用程序的安全连接(使用TLS和HTTPS等协议)都信任预安装的系统CA,而面向Android 6.0(API级别23)及更低版本的应用程序默认也信任用户添加的CA存储。
所以我需要在清单中包含networkSecurityConfig
并允许用户证书。