报错PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"

今天在调用第三方HTTPS接口的时候,一直显示这个报错,然后百度很久,有2种解决方法,一个是说自己手动去导入,第二种用代码忽略证书验证。我用二种方式,

复制即用,

 public void test2() throws Exception {

        Map<String,Object> map=new LinkedHashMap<>();
        map.put("teletephone",手机号码);
        map.put("msgCode",车牌号);
        map.put("msgContent",地址);
        List<Map<String,Object>> list=new ArrayList<>();
        list.add(map);
        String params= JSONArray.toJSONString(list);
        System.out.println(params);
        BASE64Encoder encoder = new BASE64Encoder();
        String encode = encoder.encode(params.getBytes());//编码
        System.out.println(encode);

        URL console = new URL("第三方路径?method=sendMSGPublic&id=1&params="+params);
        HttpURLConnection conn = (HttpURLConnection) console.openConnection();
        if (conn instanceof HttpsURLConnection)  {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
            ((HttpsURLConnection) conn).setSSLSocketFactory(sc.getSocketFactory());
            ((HttpsURLConnection) conn).setHostnameVerifier(new TrustAnyHostnameVerifier());
        }
        conn.connect();
        System.out.println(conn.getResponseCode());
        if(200 == conn.getResponseCode()){
            //得到输入流
            InputStream is =conn.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while(-1 != (len = is.read(buffer))){
                baos.write(buffer,0,len);
                baos.flush();
            }
            System.out.println(baos.toString("utf-8"));
        }
    }

    private static class TrustAnyTrustManager 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[]{};
        }
    }

    private static class TrustAnyHostnameVerifier implements HostnameVerifier {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }


    }

 

posted @ 2018-09-19 20:35  李科技  阅读(8222)  评论(0编辑  收藏  举报