解决PKIX path building failed的问题以及示例

来源:互联网 发布:cat linux 指定行 编辑:程序博客网 时间:2024/06/07 21:52

这个是证书出问题了,服务器不信任我们自己创建的证书,所以在代码中必须要忽略证书信任问题。
解决方法:
第一步:首先创建一个SslUtil工具类,在里面做忽略证书信任操作:

import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;public class SslUtil {    private static void trustAllHttpsCertificates() throws Exception {        TrustManager[] trustAllCerts = new TrustManager[1];        TrustManager tm = new miTM();        trustAllCerts[0] = tm;        SSLContext sc = SSLContext.getInstance("SSL");        sc.init(null, trustAllCerts, null);        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());    }    static class miTM implements TrustManager,X509TrustManager {        public X509Certificate[] getAcceptedIssuers() {            return null;        }        public boolean isServerTrusted(X509Certificate[] certs) {            return true;        }        public boolean isClientTrusted(X509Certificate[] certs) {            return true;        }        public void checkServerTrusted(X509Certificate[] certs, String authType)                throws CertificateException {            return;        }        public void checkClientTrusted(X509Certificate[] certs, String authType)                throws CertificateException {            return;        }    }    /**     * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用     * @throws Exception     */    public static void ignoreSsl() throws Exception{        HostnameVerifier hv = new HostnameVerifier() {            public boolean verify(String urlHostName, SSLSession session) {                System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());                return true;            }        };        trustAllHttpsCertificates();        HttpsURLConnection.setDefaultHostnameVerifier(hv);    }}

示例代码:

String urlStr="测试网址";URL urlPost = null;urlPost = new URL(urlStr);if("https".equalsIgnoreCase(urlPost.getProtocol())){//判定网址是否信任,不信任则调用忽略信任工具类SslUtil    SslUtil.ignoreSsl();}...//往下就是建立连接connection了
阅读全文
0 0
原创粉丝点击