报错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¶ms="+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; } }