做了个工具,用到了okhttp3,利用https访问一些资源结果报错SSLHandShakeException,查了查最后给解决了,这里不讨论https,网上好不容易弄好的,这里分享一下,网上大部分是安卓的,我这里就是利用的java,做个笔记解决因为证书问题而无法访问。
就是在new
OkHttpClient okHttpClient;
的时候加些自定义证书,写一些代码在okHttpClient生成前加入就可以了。一个静态方法,两个静态类,最后注入的时候能访问到就好。
private static SSLSocketFactory createSSLSocketFactory() {
SSLSocketFactory ssfFactory = null;
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[] { new TrustAllCerts() }, new SecureRandom());
ssfFactory = sc.getSocketFactory();
} catch (Exception e) {
}
return ssfFactory;
}
private static class TrustAllCerts implements 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];}
}
private static class TrustAllHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
OkHttpClient.Builder mBuilder = new OkHttpClient.Builder();
mBuilder.sslSocketFactory(createSSLSocketFactory());
mBuilder.hostnameVerifier(new TrustAllHostnameVerifier());
OkHttpClient client = mBuilder.build();
然后你就得到了OkHttpClient接下来就随便操作使用就好,就不会出现SSLHandShakeException的错误了。