SSLHandshakeException解决
搞了一周 各种头疼
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
最后终于搞定
直接代码走起
在做请求之前添加一个方法
createIgnoreVerifySSL("TLSv1.1");
/**
* 绕过验证
* @return
*/
fun createIgnoreVerifySSL(sslVersion: String): SSLSocketFactory {
var sc = SSLContext.getInstance(sslVersion);
val trustAllCerts: Array<TrustManager> = arrayOf(object : X509TrustManager {
@Throws(CertificateException::class)
override fun checkClientTrusted(
chain: Array<java.security.cert.X509Certificate>, authType: String) {
}
@Throws(CertificateException::class)
override fun checkServerTrusted(chain: Array<java.security.cert.X509Certificate>, authType: String) {
}
override fun getAcceptedIssuers(): Array<X509Certificate?> {
return arrayOfNulls(0)
}
})
sc!!.init(null, trustAllCerts, java.security.SecureRandom())
// Create all-trusting host name verifier
val allHostsValid = HostnameVerifier { _, _ -> true }
/***
* 如果 hostname in certificate didn't match的话就给一个默认的主机验证
*/
setDefaultSSLSocketFactory(sc.getSocketFactory());
setDefaultHostnameVerifier(allHostsValid);
return sc.socketFactory;
}