原文地址:http://hi.baidu.com/qnaaceyaqlbklzq/item/703ef019151d94403a176efe
访问https 资源时,让httpclient接受所有ssl证书,在weblogic等容器中很有用
代码如下:
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.httpclient.ConnectTimeoutException;
import org.apache.commons.httpclient.params.HttpConnectionParams;
import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
public class MySecureProtocolSocketFactory implements SecureProtocolSocketFactory {
static{
System.out.println(">>>>in MySecureProtocolSocketFactory>>");
}
private SSLContext sslcontext = null;
private SSLContext createSSLContext() {
SSLContext sslcontext=null;
try {
sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
return sslcontext;
}
private SSLContext getSSLContext() {
if (this.sslcontext == null) {
this.sslcontext = createSSLContext();
}
return this.sslcontext;
}
public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(
socket,
host,
port,
autoClose
);
}
public Socket createSocket(String host, int port) throws IOException,
UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(
host,
port
);
}
public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort)
throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort);
}
public Socket createSocket(String host, int port, InetAddress localAddress,
int localPort, HttpConnectionParams params) throws IOException,
UnknownHostException, ConnectTimeoutException {
if (params == null) {
throw new IllegalArgumentException("Parameters may not be null");
}
int timeout = params.getConnectionTimeout();
SocketFactory socketfactory = getSSLContext().getSocketFactory();
if (timeout == 0) {
return socketfactory.createSocket(host, port, localAddress, localPort);
} else {
Socket socket = socketfactory.createSocket();
SocketAddress localaddr = new InetSocketAddress(localAddress, localPort);
SocketAddress remoteaddr = new InetSocketAddress(host, port);
socket.bind(localaddr);
socket.connect(remoteaddr, timeout);
return socket;
}
}
//自定义私有类
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[]{};
}
}
}
然后按如下方式使用HttpClient
Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory (), 443);
Protocol.registerProtocol("https", myhttps);
HttpClient httpclient=new HttpClient();
相关推荐
本篇将详细介绍如何配置HttpClient以自动接受所有https的证书,以便在进行测试或调试时避免这些问题。 首先,我们需要理解SSL/TLS证书的工作原理。当客户端(如HttpClient)与服务器建立连接时,服务器会提供其证书...
3. 创建一个`TrustManagerFactory`,通常可以设置为`TrustAllManager`,以接受任何服务器的证书。 4. 初始化`SSLContext`,使用上面的`KeyManagerFactory`和`TrustManagerFactory`。 5. 创建一个`...
总结来说,`HTTPClient`访问启用SSL的Quickr REST API涉及到创建支持SSL的Socket工厂以及自定义的信任管理器,以适应不严格的证书验证。这两个类`EasySSLProtocolSocketFactory`和`EasyX509TrustManager`是实现这一...
代码可能包括创建一个TrustManager,用于接受任何服务器的证书,或者使用自定义的信任管理器来限制可接受的证书。此外,还需要创建一个SSLConnectionSocketFactory,它是HttpClient中的关键组件,负责建立安全的SSL/...
这样,HttpClient就会使用我们配置过的`SSLSocketFactory`来处理HTTPS连接,从而接受所有服务器的证书,不论其是否被权威机构认证。 这种方法在测试环境中非常有用,因为它允许HttpClient与未安装正式证书的服务器...
总的来说,这个示例展示了如何在Java中使用HttpClient调用HTTPS服务,同时跳过SSL证书验证。然而,这样做存在安全风险,因为任何中间人攻击者都可以拦截并篡改通信。在生产环境中,你应该始终使用受信任的证书并启用...
而使用`httpclient`时,你需要配置客户端的信任存储,以便接受服务器的证书,并设置SSL上下文以启用HTTPS连接。 总的来说,这个压缩包提供的`keytool`和`httpclient`相关JAR文件是进行安全的HTTPS通信的基础。理解...
本文将详细介绍如何使用`HttpClient`和`HttpsURLConnection`两种方式来访问HTTPS网站,包括验证证书和不验证证书的实现方法。 ### 1. Android中的HttpClient `HttpClient`是Apache提供的一种HTTP客户端库,它支持...
4. **配置HttpClient实例**:最后,你需要将之前创建的HTTPS连接管理器设置到HttpClient实例中,这样所有的请求都将通过HTTPS进行。 在开发过程中,可能还需要处理如证书链问题、自签名证书和不受信任的CA等问题。...
如果你需要连接的服务器使用自签名证书或非公共CA签发的证书,你可能需要自定义TrustManager,接受所有的证书。然而,这在生产环境中是不推荐的,因为它会降低安全性。 证书管理在HTTPS通信中扮演着核心角色。证书...
在处理HTTPS请求时,HttpClient允许设置自定义SSL证书和信任管理器,以实现更复杂的SSL/TLS协议交互。 其次,HttpsUrlConnection是Java标准库的一部分,它提供了对HTTPS的支持。相比HttpClient,HttpsUrlConnection...
另一种常见的配置方式是接受所有的SSL证书,尽管这不是一种安全的做法,但有时出于测试或其他特殊目的可能会使用这种配置: ```java SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(null, ...
总结,HttpClient 4.3提供了处理自签名HTTPS站点的能力,通过自定义SSLContext和TrustManager,我们可以创建一个信任所有证书的HttpClient。这个工具类的实现简化了这个过程,使得在开发和测试环境中与自签名HTTPS...
开发者可以自定义TrustStore和KeyStore,以控制哪些服务器证书被接受,从而防止不安全的连接。此外,该版本还支持SSL/TLS的配置选项,比如设置最小加密强度、禁用特定的密码套件等,以增强安全性。 在实际应用中,...
首先,我们需要了解如何创建和管理SSL证书。在Java中,这通常涉及到KeyStore和TrustStore的概念。KeyStore存储私钥和证书,而TrustStore则存储我们信任的CA证书。在Spring Boot应用中,可以通过配置`server.ssl.key-...
同时,可能还会涉及到如何处理证书验证问题,因为默认情况下,Java会对证书链进行严格的检查,对于自签名证书或者非标准CA签发的证书,可能需要自定义TrustManager来接受。 总的来说,这个压缩包中的源码实例将带你...
6. **SSL/TLS支持**:对于HTTPS通信,`commons-httpclient`提供了安全套接层的支持,可以处理SSL证书、信任管理以及加密参数。 7. **异步处理**:虽然`commons-httpclient`主要是基于同步模型设计的,但在某些场景...
在Android平台上进行HTTPS通信时,通常需要验证服务器的SSL证书,这是为了确保数据传输的安全性。但有时我们可能需要访问自签发的CA(证书颁发机构)证书的HTTPS服务,例如在开发和测试环境中。本篇文章将深入探讨...
hostnameincertificatedidn'tmatchϢhttpclienthostnameincertificatedidn'tmatchҪӵĴ룺`”,这段话翻译过来大致意思是:“在使用HttpClient处理HTTPS请求时遇到的`SSLException`异常:证书中的主机名不匹配。...
同时,数据的安全性也很重要,如果涉及敏感信息,可能需要使用HTTPS协议,并管理好SSL/TLS证书。 总结起来,这个项目利用了Apache HTTPClient来查询股票信息,结合CSV解析库处理返回的数据,可能通过一个股票代码...