javax.net.ssl.SSLHandshakeException: Chain validation failed Android如何处理
时间: 2023-11-03 13:23:10 浏览: 311
在 Android 中处理 "javax.net.ssl.SSLHandshakeException: Chain validation failed" 错误,可以尝试以下几个步骤:
1. 确认证书是否已过期或被撤销,并使用正确的证书。
2. 确保证书链完整且证书签名受信任。
3. 确认服务器已正确配置 SSL/TLS。
4. 更新本地证书存储,添加缺少的根证书或中间证书。
如果以上步骤都无法解决问题,你可以尝试禁用 SSL 证书验证,但这并不是一个安全的解决方案,因为它可能会导致中间人攻击。
在 Android 中禁用 SSL 证书验证需要使用自定义 TrustManager。可以创建一个自定义 TrustManager 类,重写它的 checkServerTrusted() 方法,并在该方法中始终返回正确的结果。然后创建一个 SSLContext 对象,并在其中设置自定义 TrustManager,最后将其用于创建 HttpsURLConnection 对象或 OkHttpClient。示例如下:
```
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager)trustAllCerts[0])
.hostnameVerifier((hostname, session) -> true)
.build();
```
请注意,这种方法会跳过证书验证,存在安全风险。因此,建议仅在测试或开发环境中使用。在生产环境中,应使用有效的 SSL 证书并正确配置服务器。
阅读全文