From 22bb2ffde8e9f037b75a6a691242f5c79f7d151b Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 14 Dec 2015 20:49:31 +0800 Subject: [PATCH] =?UTF-8?q?sslcontext=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin4j/http/factory/HttpComponent3.java | 16 ++++++--- .../http/factory/HttpComponent4_1.java | 34 ++++++++++++------- .../http/factory/HttpComponent4_2.java | 30 ++++++++++------ 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3.java index 2566fb79..55db65f6 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3.java @@ -92,6 +92,8 @@ public class HttpComponent3 extends AbstractHttpClient { } else { httpMethod.setURI(uri); } + boolean useSSL = "https".equals(uri.getScheme()); + SSLContext sslContext = null; HttpParams params = request.getParams(); if (params != null) { Proxy proxy = params.getProxy(); @@ -101,12 +103,9 @@ public class HttpComponent3 extends AbstractHttpClient { httpClient.getHostConfiguration().setProxy( socketAddress.getHostName(), socketAddress.getPort()); + useSSL = false; } - SSLContext sslContext = params.getSSLContext(); - if (sslContext != null) { - Protocol.registerProtocol("https", new Protocol("https", - new SSLProtocolSocketFactory(sslContext), 443)); - } + sslContext = params.getSSLContext(); httpClient.getHttpConnectionManager().getParams() .setConnectionTimeout(params.getConnectTimeout()); httpClient.getHttpConnectionManager().getParams() @@ -115,6 +114,13 @@ public class HttpComponent3 extends AbstractHttpClient { httpMethod.getParams().setSoTimeout(params.getSocketTimeout()); httpMethod.getParams().setContentCharset(Consts.UTF_8.name()); } + if (useSSL) { + if (sslContext == null) { + sslContext = HttpClientFactory.allowSSLContext(); + } + Protocol.registerProtocol("https", new Protocol("https", + new SSLProtocolSocketFactory(sslContext), 443)); + } com.foxinmy.weixin4j.http.HttpHeaders headers = request .getHeaders(); if (headers == null) { diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_1.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_1.java index 399a1b48..563318e5 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_1.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_1.java @@ -3,6 +3,8 @@ package com.foxinmy.weixin4j.http.factory; import java.io.IOException; import java.net.InetSocketAddress; +import javax.net.ssl.SSLContext; + import org.apache.http.HttpHost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.conn.params.ConnRoutePNames; @@ -43,6 +45,9 @@ public class HttpComponent4_1 extends HttpComponent4 { try { HttpRequestBase uriRequest = methodMap.get(request.getMethod()); uriRequest.setURI(request.getURI()); + boolean useSSL = "https".equals(request.getURI().getScheme()); + SSLContext sslContext = null; + X509HostnameVerifier hostnameVerifier = null; HttpParams params = request.getParams(); if (params != null) { if (params.getProxy() != null) { @@ -52,6 +57,7 @@ public class HttpComponent4_1 extends HttpComponent4 { socketAddress.getPort()); uriRequest.getParams().setParameter( ConnRoutePNames.DEFAULT_PROXY, proxy); + useSSL = false; } uriRequest.getParams().setIntParameter( CoreConnectionPNames.SOCKET_BUFFER_SIZE, @@ -68,19 +74,23 @@ public class HttpComponent4_1 extends HttpComponent4 { HttpHeaders.CONTENT_ENCODING, Consts.UTF_8); uriRequest.getParams().setParameter(HttpHeaders.ACCEPT_CHARSET, Consts.UTF_8); - if (params.getSSLContext() != null) { - SSLSocketFactory socketFactory = new SSLSocketFactory( - params.getSSLContext()); - X509HostnameVerifier hostnameVerifier = SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; - if (params.getHostnameVerifier() != null) { - hostnameVerifier = new CustomHostnameVerifier( - params.getHostnameVerifier()); - } - socketFactory.setHostnameVerifier(hostnameVerifier); - Scheme scheme = new Scheme("https", socketFactory, 443); - httpClient.getConnectionManager().getSchemeRegistry() - .register(scheme); + sslContext = params.getSSLContext(); + hostnameVerifier = new CustomHostnameVerifier( + params.getHostnameVerifier()); + } + if (useSSL) { + if (sslContext == null) { + sslContext = HttpClientFactory.allowSSLContext(); } + if (hostnameVerifier == null) { + hostnameVerifier = SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; + } + SSLSocketFactory socketFactory = new SSLSocketFactory( + sslContext); + socketFactory.setHostnameVerifier(hostnameVerifier); + Scheme scheme = new Scheme("https", socketFactory, 443); + httpClient.getConnectionManager().getSchemeRegistry() + .register(scheme); } addHeaders(request.getHeaders(), uriRequest); addEntity(request.getEntity(), uriRequest); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2.java index 77e4dc96..287a3bc3 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2.java @@ -3,6 +3,8 @@ package com.foxinmy.weixin4j.http.factory; import java.io.IOException; import java.net.InetSocketAddress; +import javax.net.ssl.SSLContext; + import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.config.RequestConfig.Builder; @@ -41,6 +43,9 @@ public class HttpComponent4_2 extends HttpComponent4 { try { HttpRequestBase uriRequest = methodMap.get(request.getMethod()); uriRequest.setURI(request.getURI()); + boolean useSSL = "https".equals(request.getURI().getScheme()); + SSLContext sslContext = null; + X509HostnameVerifier hostnameVerifier = null; HttpParams params = request.getParams(); if (params != null) { Builder requestConfig = RequestConfig.custom() @@ -53,18 +58,23 @@ public class HttpComponent4_2 extends HttpComponent4 { HttpHost proxy = new HttpHost(socketAddress.getHostName(), socketAddress.getPort()); requestConfig.setProxy(proxy); - } - if (params.getSSLContext() != null) { - X509HostnameVerifier hostnameVerifier = SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; - if (params.getHostnameVerifier() != null) { - hostnameVerifier = new CustomHostnameVerifier( - params.getHostnameVerifier()); - } - httpClient = HttpClients.custom() - .setHostnameVerifier(hostnameVerifier) - .setSslcontext(params.getSSLContext()).build(); + useSSL = false; } uriRequest.setConfig(requestConfig.build()); + sslContext = params.getSSLContext(); + hostnameVerifier = new CustomHostnameVerifier( + params.getHostnameVerifier()); + } + if (useSSL) { + if (sslContext == null) { + sslContext = HttpClientFactory.allowSSLContext(); + } + if (hostnameVerifier == null) { + hostnameVerifier = SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; + } + httpClient = HttpClients.custom() + .setHostnameVerifier(hostnameVerifier) + .setSslcontext(sslContext).build(); } addHeaders(request.getHeaders(), uriRequest); addEntity(request.getEntity(), uriRequest);