当前位置: 代码迷 >> 综合 >> SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path buildin
  详细解决方案

SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path buildin

热度:21   发布时间:2023-11-22 11:06:02.0

方法一

 URL url = new URL(remoteUrl);if("https".equalsIgnoreCase(url.getProtocol())){SslUtils.ignoreSsl();}

SslUtils

public class SslUtils {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 {@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}public boolean isServerTrusted(X509Certificate[] certs) {return true;}public boolean isClientTrusted(X509Certificate[] certs) {return true;}@Overridepublic void checkServerTrusted(X509Certificate[] certs, String authType)throws CertificateException {return;}@Overridepublic void checkClientTrusted(X509Certificate[] certs, String authType)throws CertificateException {return;}}/*** 忽略HTTPS请求的SSL证书,必须在openConnection之前调用* @throws Exception*/public static void ignoreSsl() throws Exception{HostnameVerifier hv = new HostnameVerifier() {@Overridepublic boolean verify(String urlHostName, SSLSession session) {return true;}};trustAllHttpsCertificates();HttpsURLConnection.setDefaultHostnameVerifier(hv);}
}

第二种

 trustAllHosts();HttpsURLConnection https = (HttpsURLConnection) url.openConnection();if (url.getProtocol().toLowerCase().equals("https")) {https.setHostnameVerifier(DO_NOT_VERIFY);con = https;} else {con = (HttpURLConnection) url.openConnection();}
final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {public boolean verify(String hostname, SSLSession session) {return true;}};/*** Trust every server - dont check for any certificate*/private static void trustAllHosts() {final String TAG = "trustAllHosts";// Create a trust manager that does not validate certificate chainsTrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {@Overridepublic void checkClientTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {log.info(TAG + " checkClientTrusted");}@Overridepublic void checkServerTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {log.info(TAG + " checkServerTrusted");}public java.security.cert.X509Certificate[] getAcceptedIssuers() {return new java.security.cert.X509Certificate[]{};}}};// Install the all-trusting trust managertry {SSLContext sc = SSLContext.getInstance("TLS");sc.init(null, trustAllCerts, new java.security.SecureRandom());HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());} catch (Exception e) {e.printStackTrace();}}
  相关解决方案