解決httpclient 4.5 https請求跳過證書驗證
阿新 • • 發佈:2019-01-26
public class SslUtil { public static CloseableHttpClient SslHttpClientBuild() { Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.INSTANCE).register("https", trustAllHttpsCertificates()).build(); //建立ConnectionManager,新增Connection配置資訊 PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).build(); return httpClient; } private static SSLConnectionSocketFactory trustAllHttpsCertificates() { SSLConnectionSocketFactory socketFactory = null; TrustManager[] trustAllCerts = new TrustManager[1]; TrustManager tm = new miTM(); trustAllCerts[0] = tm; SSLContext sc = null; try { sc = SSLContext.getInstance("TLS");//sc = SSLContext.getInstance("TLS") sc.init(null, trustAllCerts, null); socketFactory = new SSLConnectionSocketFactory(sc, NoopHostnameVerifier.INSTANCE); //HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } return socketFactory; } static class miTM implements TrustManager, X509TrustManager { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkServerTrusted(X509Certificate[] certs, String authType) { //don't check } public void checkClientTrusted(X509Certificate[] certs, String authType) { //don't check } } }