android CertPathValidatorException 与Unable to extract the trust manager on Android10Platform解决
服务器IP切换为https时 可能会遇到这些问题,app需要进行https证书验证
为了使用app内置证书可以做以下处理:
但是还是可能会报如下异常:
Unable to extract the trust manager on Android10Platform
原因:builder.sslSocketFactory(sslContext.getSocketFactory());
这个方式已经过时了,需要新的方式
工具类:
public class SSLContextUtil {
/**
*
*/
public static SSLContext getDefaultSLLContext() {
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new X509TrustManager[]{trustManager}, new SecureRandom());
} catch (Exception e) {
e.printStackTrace();
}
return sslContext;
}
/**
* 信任管理器
*/
public static final X509TrustManager trustManager = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
/**
* 域名验证
*/
public static final HostnameVerifier HOSTNAME_VERIFIER = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
}
使用如下方式:
private OkHttpClient.Builder mBuilder
SSLContext sslContext = SSLContextUtil.getDefaultSLLContext();
if (sslContext != null) {
mBuilder.sslSocketFactory(sslContext.getSocketFactory(), SSLContextUtil.trustManager);
}
mBuilder.hostnameVerifier(SSLContextUtil.HOSTNAME_VERIFIER);
以上方法能快速处理服务端证书验证的问题,这种只是非内置证书的解决方式,希望能帮助到大家