`

让httpclient接受所有ssl证书https 分享

    博客分类:
  • java
阅读更多

访问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();
之后就是照常使用了,不知道怎样用的话,参考我的其它文章

分享到:
评论

相关推荐

    HttpClient4.5 实现https忽略SSL证书验证

    使用HttpClient4.5实现https请求忽略SSL证书验证工具类

    httpClient实例httpClient调用 http/https实例 忽略SSL验证

    这个实例主要涉及如何配置HttpClient来忽略SSL(Secure Socket Layer)验证,这对于在开发和测试环境中处理自签名证书或未认证的服务器非常有用。以下将详细介绍HttpClient的使用以及如何进行SSL验证的忽略。 首先...

    HttpClient配置SSL绕过https证书实例

    HttpClient配置SSL绕过https证书实例,附件中包含所需httpclient组件jar库。博客地址:http://blog.csdn.net/irokay/article/details/78801307。

    http远程接口调用-httpClient+跳过SSL证书校验

    // 创建自定义的SSLContext,信任所有证书 SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() { @Override public boolean isTrusted(X509Certificate[] chain, String ...

    httpclient4.5 绕过ssl认证文件访问

    HTTPClient 4.5中提供了这样的功能,可以让我们自定义SSL上下文,从而绕过默认的证书验证。以下是如何操作的步骤: 1. **创建自定义的X509TrustManager**:这个类负责验证服务器证书。我们可以创建一个信任所有证书...

    httpClient自动接受https的证书代码

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

    httpclient 绕开HTTPS证书校验

    但是,我们可以通过创建一个信任所有证书的`TrustManager`实例,然后将其设置到`SSLContext`中,从而跳过证书验证。 以下是一个简单的示例,展示了如何使用`httpclient`实现这一功能: ```java import org.apache....

    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来进行https访问

    要使`httpclient`支持HTTPS访问,首先需要配置SSL上下文。这通常涉及到证书管理、密钥存储以及信任管理等环节。 ### 关键技术细节 #### 3.1 配置SSL上下文 在`httpclient`中使用HTTPS,首先要解决的是SSL上下文的...

    httpClient4.5配置SSL绕过https证书,httpClient过时替代方法-附件资源

    httpClient4.5配置SSL绕过https证书,httpClient过时替代方法-附件资源

    httpclient4.5发送https请求(验证证书)

    不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家

    httpclient4.1访问https的配置方法

    上述代码中,我们创建了一个信任所有证书的SSLContext,这在开发环境中可能适用,但在生产环境中,你需要根据实际情况配置信任的证书。 总结,通过以上步骤,我们已经成功配置了HttpClient 4.1以支持HTTPS访问。在...

    java17 https 忽略ssl认证, httpclient5 ,springboot3.2.7 脚手架

    springboot3.2.7 基于java17 ,测试https 接口,基于 RestTemplate 实现

    HttpClient之Https应用实例

    HttpClient之Https应用实例~ 包含: HttpClient 使用代理访问Https HttpClient 信任所有主机-对于任何证书都不做检查 HttpClient 允许所有证书的校验(包括过期证书)

    java,HttpClient模拟上传,绕过SSL认证

    在实际部署时,应确保服务器配置了正确的证书,并启用严格的SSL/TLS验证。 这个Java程序包含了模拟HTTPS文件上传的核心逻辑,你可以根据实际需求调整URL、文件路径和参数。通过运行这个程序,你应该能够成功地在...

    详解.NET Core 使用HttpClient SSL请求出错的解决办法

    在.NET Core中使用HttpClient进行SSL请求时,开发者可能会遇到一个常见的问题:SSL证书验证失败。这通常发生在尝试连接到使用自签名证书或未被信任证书颁发机构(CA)签名的HTTPS服务时。当.NET Core的HttpClient...

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书验证过程,以便与HTTPS服务器进行交互。 在本文中,我们将详细介绍如何使用JAVA的HttpClient库来发送POST请求,以便与HTTPS服务器进行交互。...

Global site tag (gtag.js) - Google Analytics