HttpURLConnection绕过HTTPS的SSL验证(信任所有证书)

import javax.net.ssl.*;


static {
    try {
        trustAllHttpsCertificates();
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            public boolean verify(String urlHostName, SSLSession session) {
                return true;
            }
        });
    } catch (Exception e) {
    }
}

private static void trustAllHttpsCertificates() throws NoSuchAlgorithmException,     KeyManagementException {
    TrustManager[] trustAllCerts = new TrustManager[1];
    trustAllCerts[0] = new TrustAllManager();
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, null);
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}

private static class TrustAllManager implements X509TrustManager {
    
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
    }

    public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
    }
}

跟其他公司做对接, 他们的SSL证书是自己本地创建的不受信任的证书, 用postman和网页调试都没有问题, 但是在java端用HttpURLConnectionq请求就报错误(javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException), 最后找到了设置 网络请求信任所有证书 的办法, 将上面代码放入项目中即可解决


版权声明:本文为dongyan3595原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。