在调用第三方api(Https)时出现报错,接口需要SSL证书认证(事后记录,我为什么没截图啊啊啊啊啊啊啊)
跳过SSL认证
创建一个SSL上下文 SSLContext 用于跳过认证
SSLContext ctx = SSLContext.getInstance("SSL");
HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
这时候又出现一个问题:去除SSL认证后报错java.security.cert.CertificateException:No X509TrustManager
问题出现的原因在于 没有东西可以确实SSL是否可信,X509TrustManager的用处就是这个。
使用**ctx.init(KeyManager[], TrustManager[], SecureRandom)**方法进行证书管理,并自定义TrustManager[]来信任所有证书
SSLContext ctx = SSLContext.getInstance("SSL");
TrustManager[] trustAllCerts = new TrustManager[]{new trustManager()};
ctx.init(null,trustAllCerts,null);
HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
public class TrustManager implements X509TrustManager {
// 不进行任何客户端证书验证
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { }
// 不进行任何服务器证书验证
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { }
public X509Certificate[] getAcceptedIssuers() {
// 返回空的证书数组,接受所有证书
return new X509Certificate[0];
}
}