sslcontext的bug

This commit is contained in:
jinyu 2015-12-14 20:49:31 +08:00
parent 12367d63c6
commit 22bb2ffde8
3 changed files with 53 additions and 27 deletions

View File

@ -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) {

View File

@ -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);

View File

@ -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);