`
huchangan2005
  • 浏览: 78287 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

让httpclient接受所有ssl证书https

阅读更多

原文地址: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的证书代码

    本篇将详细介绍如何配置HttpClient以自动接受所有https的证书,以便在进行测试或调试时避免这些问题。 首先,我们需要理解SSL/TLS证书的工作原理。当客户端(如HttpClient)与服务器建立连接时,服务器会提供其证书...

    JAVA利用HttpClient进行HTTPS接口调用

    代码可能包括创建一个TrustManager,用于接受任何服务器的证书,或者使用自定义的信任管理器来限制可接受的证书。此外,还需要创建一个SSLConnectionSocketFactory,它是HttpClient中的关键组件,负责建立安全的SSL/...

    通过HTTPClient访问启用SSL的Quickr REST API

    总结来说,`HTTPClient`访问启用SSL的Quickr REST API涉及到创建支持SSL的Socket工厂以及自定义的信任管理器,以适应不严格的证书验证。这两个类`EasySSLProtocolSocketFactory`和`EasyX509TrustManager`是实现这一...

    httpclient访问需要客户端认证数字证书的https接口的处理方法

    3. 创建一个`TrustManagerFactory`,通常可以设置为`TrustAllManager`,以接受任何服务器的证书。 4. 初始化`SSLContext`,使用上面的`KeyManagerFactory`和`TrustManagerFactory`。 5. 创建一个`...

    httpclient ssl 相关问题解决资料

    这样,HttpClient就会使用我们配置过的`SSLSocketFactory`来处理HTTPS连接,从而接受所有服务器的证书,不论其是否被权威机构认证。 这种方法在测试环境中非常有用,因为它允许HttpClient与未安装正式证书的服务器...

    使用httpclient无需证书调用https的示例(java调用https)

    总的来说,这个示例展示了如何在Java中使用HttpClient调用HTTPS服务,同时跳过SSL证书验证。然而,这样做存在安全风险,因为任何中间人攻击者都可以拦截并篡改通信。在生产环境中,你应该始终使用受信任的证书并启用...

    keytool httpclient https所需jar包

    而使用`httpclient`时,你需要配置客户端的信任存储,以便接受服务器的证书,并设置SSL上下文以启用HTTPS连接。 总的来说,这个压缩包提供的`keytool`和`httpclient`相关JAR文件是进行安全的HTTPS通信的基础。理解...

    Android使用HttpClient和HttpsUrlConnection两种方式访问https网站

    本文将详细介绍如何使用`HttpClient`和`HttpsURLConnection`两种方式来访问HTTPS网站,包括验证证书和不验证证书的实现方法。 ### 1. Android中的HttpClient `HttpClient`是Apache提供的一种HTTP客户端库,它支持...

    HttpClient 3.1 Jar包

    4. **配置HttpClient实例**:最后,你需要将之前创建的HTTPS连接管理器设置到HttpClient实例中,这样所有的请求都将通过HTTPS进行。 在开发过程中,可能还需要处理如证书链问题、自签名证书和不受信任的CA等问题。...

    给予javaWeb-httpclient请求https实例demo

    如果你需要连接的服务器使用自签名证书或非公共CA签发的证书,你可能需要自定义TrustManager,接受所有的证书。然而,这在生产环境中是不推荐的,因为它会降低安全性。 证书管理在HTTPS通信中扮演着核心角色。证书...

    HttpClient和HttpsUrlConnection

    在处理HTTPS请求时,HttpClient允许设置自定义SSL证书和信任管理器,以实现更复杂的SSL/TLS协议交互。 其次,HttpsUrlConnection是Java标准库的一部分,它提供了对HTTPS的支持。相比HttpClient,HttpsUrlConnection...

    HTTPClient

    另一种常见的配置方式是接受所有的SSL证书,尽管这不是一种安全的做法,但有时出于测试或其他特殊目的可能会使用这种配置: ```java SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(null, ...

    基于HttpClient 4.3的可访问自签名HTTPS站点的新版工具类

    总结,HttpClient 4.3提供了处理自签名HTTPS站点的能力,通过自定义SSLContext和TrustManager,我们可以创建一个信任所有证书的HttpClient。这个工具类的实现简化了这个过程,使得在开发和测试环境中与自签名HTTPS...

    httpclient-4.2.5 相关jar包

    开发者可以自定义TrustStore和KeyStore,以控制哪些服务器证书被接受,从而防止不安全的连接。此外,该版本还支持SSL/TLS的配置选项,比如设置最小加密强度、禁用特定的密码套件等,以增强安全性。 在实际应用中,...

    https请求加载证书

    首先,我们需要了解如何创建和管理SSL证书。在Java中,这通常涉及到KeyStore和TrustStore的概念。KeyStore存储私钥和证书,而TrustStore则存储我们信任的CA证书。在Spring Boot应用中,可以通过配置`server.ssl.key-...

    java源码:Java中的SSL及HTTPS协议实例源码.rar

    同时,可能还会涉及到如何处理证书验证问题,因为默认情况下,Java会对证书链进行严格的检查,对于自签名证书或者非标准CA签发的证书,可能需要自定义TrustManager来接受。 总的来说,这个压缩包中的源码实例将带你...

    commons-httpclient 源代码包

    6. **SSL/TLS支持**:对于HTTPS通信,`commons-httpclient`提供了安全套接层的支持,可以处理SSL证书、信任管理以及加密参数。 7. **异步处理**:虽然`commons-httpclient`主要是基于同步模型设计的,但在某些场景...

    android访问自签CA的Https SSL双向认证(j2SE也能使用)

    在Android平台上进行HTTPS通信时,通常需要验证服务器的SSL证书,这是为了确保数据传输的安全性。但有时我们可能需要访问自签发的CA(证书颁发机构)证书的HTTPS服务,例如在开发和测试环境中。本篇文章将深入探讨...

    应用HttpClient时添加的代码。

    hostnameincertificatedidn'tmatchϢhttpclienthostnameincertificatedidn'tmatchҪӵĴ룺`”,这段话翻译过来大致意思是:“在使用HttpClient处理HTTPS请求时遇到的`SSLException`异常:证书中的主机名不匹配。...

    httpclient 查询股票信息

    同时,数据的安全性也很重要,如果涉及敏感信息,可能需要使用HTTPS协议,并管理好SSL/TLS证书。 总结起来,这个项目利用了Apache HTTPClient来查询股票信息,结合CSV解析库处理返回的数据,可能通过一个股票代码...

Global site tag (gtag.js) - Google Analytics