`

httpclient 无信任证书使用https

    博客分类:
  • JAVA
阅读更多

1、当不需要使用任何证书访问https网页时,只需配置信任任何证书

Java代码  收藏代码
  1. HttpClient http = new HttpClient();  
  2. String url = "https://payment.cib.com.cn/payment/api/rest";  
  3. Protocol myhttps = new Protocol("https"new MySSLProtocolSocketFactory(), 443);   
  4. Protocol.registerProtocol("https", myhttps);   
  5. PostMethod post = new PostMethod(url);  

 

 

2、其中信任任何证书的类

Java代码  收藏代码
  1. import java.io.IOException;  
  2. import java.net.InetAddress;  
  3. import java.net.InetSocketAddress;  
  4. import java.net.Socket;  
  5. import java.net.SocketAddress;  
  6. import java.net.UnknownHostException;  
  7. import java.security.KeyManagementException;  
  8. import java.security.NoSuchAlgorithmException;  
  9. import java.security.cert.CertificateException;  
  10. import java.security.cert.X509Certificate;  
  11.   
  12. import javax.net.SocketFactory;  
  13. import javax.net.ssl.SSLContext;  
  14. import javax.net.ssl.TrustManager;  
  15. import javax.net.ssl.X509TrustManager;  
  16.   
  17. import org.apache.commons.httpclient.ConnectTimeoutException;  
  18. import org.apache.commons.httpclient.params.HttpConnectionParams;  
  19. import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;  
  20.   
  21.   
  22.   
  23. /** 
  24.  * author by lpp 
  25.  * 
  26.  * created at 2010-7-26 上午09:29:33 
  27.  */  
  28. public class MySSLProtocolSocketFactory implements ProtocolSocketFactory {  
  29.   
  30.   private SSLContext sslcontext = null;   
  31.    
  32.   private SSLContext createSSLContext() {   
  33.       SSLContext sslcontext=null;   
  34.       try {   
  35.           sslcontext = SSLContext.getInstance("SSL");   
  36.           sslcontext.init(nullnew TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());   
  37.       } catch (NoSuchAlgorithmException e) {   
  38.           e.printStackTrace();   
  39.       } catch (KeyManagementException e) {   
  40.           e.printStackTrace();   
  41.       }   
  42.       return sslcontext;   
  43.   }   
  44.    
  45.   private SSLContext getSSLContext() {   
  46.       if (this.sslcontext == null) {   
  47.           this.sslcontext = createSSLContext();   
  48.       }   
  49.       return this.sslcontext;   
  50.   }   
  51.    
  52.   public Socket createSocket(Socket socket, String host, int port, boolean autoClose)   
  53.           throws IOException, UnknownHostException {   
  54.       return getSSLContext().getSocketFactory().createSocket(   
  55.               socket,   
  56.               host,   
  57.               port,   
  58.               autoClose   
  59.           );   
  60.   }   
  61.   
  62.   public Socket createSocket(String host, int port) throws IOException,   
  63.           UnknownHostException {   
  64.       return getSSLContext().getSocketFactory().createSocket(   
  65.               host,   
  66.               port   
  67.           );   
  68.   }   
  69.    
  70.    
  71.   public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort)   
  72.           throws IOException, UnknownHostException {   
  73.       return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort);   
  74.   }   
  75.   
  76.   public Socket createSocket(String host, int port, InetAddress localAddress,   
  77.           int localPort, HttpConnectionParams params) throws IOException,   
  78.           UnknownHostException, ConnectTimeoutException {   
  79.       if (params == null) {   
  80.           throw new IllegalArgumentException("Parameters may not be null");   
  81.       }   
  82.       int timeout = params.getConnectionTimeout();   
  83.       SocketFactory socketfactory = getSSLContext().getSocketFactory();   
  84.       if (timeout == 0) {   
  85.           return socketfactory.createSocket(host, port, localAddress, localPort);   
  86.       } else {   
  87.           Socket socket = socketfactory.createSocket();   
  88.           SocketAddress localaddr = new InetSocketAddress(localAddress, localPort);   
  89.           SocketAddress remoteaddr = new InetSocketAddress(host, port);   
  90.           socket.bind(localaddr);   
  91.           socket.connect(remoteaddr, timeout);   
  92.           return socket;   
  93.       }   
  94.   }   
  95.    
  96.   //自定义私有类   
  97.   private static class TrustAnyTrustManager implements X509TrustManager {   
  98.       
  99.       public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {   
  100.       }   
  101.   
  102.       public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {   
  103.       }   
  104.   
  105.       public X509Certificate[] getAcceptedIssuers() {   
  106.           return new X509Certificate[]{};   
  107.       }   
  108.   }     
  109.   
  110.   
  111. }  
分享到:
评论

相关推荐

    httpclient来进行https访问

    根据提供的文件信息,我们可以深入探讨如何使用`...通过以上步骤,我们可以使用`httpclient`库安全地进行HTTPS访问,并且可以根据具体需求定制信任管理和异常处理机制。这对于构建安全可靠的网络应用程序至关重要。

    httpclient 绕开HTTPS证书校验

    在默认情况下,`httpclient`会使用系统提供的`TrustManager`,这会严格检查服务器证书链是否可信任。但是,我们可以通过创建一个信任所有证书的`TrustManager`实例,然后将其设置到`SSLContext`中,从而跳过证书验证...

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

    1. 使用`InstallCert.java`获取或安装服务器的证书到本地信任存储。 2. 创建一个`KeyManagerFactory`,加载客户端的私钥和证书。 3. 创建一个`TrustManagerFactory`,通常可以设置为`TrustAllManager`,以接受任何...

    JAVA利用HttpClient进行HTTPS接口调用

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

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

    以下是一个使用HttpClient进行无证书验证调用HTTPS的示例。 首先,我们需要创建一个自定义的`SSLSocketFactory`,该工厂会忽略证书验证。这通常不推荐用于生产环境,因为它可能导致安全漏洞,但在测试或调试时非常...

    httpClient自动接受https的证书代码

    当我们使用HttpClient进行HTTPS请求时,有时会遇到证书相关的问题,如服务器证书不受信任或未被系统信任的CA(证书权威机构)签发。本篇将详细介绍如何配置HttpClient以自动接受所有https的证书,以便在进行测试或...

    HttpClient之Https应用实例

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

    使用httpClient访问https+443端口号。

    3. **配置SSL上下文**:由于使用HTTPS,我们需要配置SSLContext以信任服务器的证书。这通常涉及到加载信任存储(truststore)和密钥存储(keystore),并设置相应的系统属性或者直接在`SSLContext`上设置。 4. **...

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

    在生产环境中,应始终使用受信任的SSL证书并启用正常的SSL校验。 总结来说,HttpClient是Java中实现HTTP/HTTPS请求的强大工具,而跳过SSL证书校验的功能在开发和测试环境中非常有用。通过创建自定义的SSLContext和...

    java实现读取证书访问https接口

    本篇文章将深入探讨如何在Java中实现读取不同格式(如cer、der、crt)的证书,以及如何使用这些证书访问HTTPS接口并获取返回数据。 首先,我们需要了解证书的基本概念。证书通常包含了公钥和一些身份信息,由受信任...

    keytool httpclient https所需jar包

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

    HttpClient使用教程 事例

    1. **加载信任的CA证书**:在Java中,我们通常会使用`KeyStore`类来管理证书。首先,我们需要获取服务器的证书或其对应的CA根证书,并将其导入到Java的信任库(默认为`cacerts`)。可以使用`keytool`命令行工具进行...

    Client-https-server.rar_httpclient服务器_https_https client_https c

    如果你信任所有服务器证书(不推荐用于生产环境),可以使用以下代码: ```java SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(null, new TrustStrategy() { @Override public boolean is...

    简单json解析,httpclient免证书校验

    1. **创建自定义SSLContext**:首先,我们需要创建一个TrustManager,它信任所有证书,然后使用这个TrustManager创建一个SSLContext。 2. **配置HttpClient**:使用自定义的SSLContext和SocketFactory来配置...

    HttpClient Https实战

    这篇博客“HttpClient Https实战”很可能详细介绍了如何使用HttpClient库来处理HTTPS连接,这是在互联网安全通信中不可或缺的一部分。 HttpClient库提供了丰富的API,使得开发者可以方便地发送GET、POST等各种HTTP...

    httpclient使用NTLM协与https协议访问双向认证站点

    这需要设置一个`SSLContext`,并提供一个包含了信任证书的`KeyStore`。以下是一个示例: ```java KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); InputStream in = new FileInputStream...

    httpclient4.1访问https的配置方法

    我们将涵盖SSL证书的生成、Tomcat服务器的SSL配置以及HttpClient的使用。” 【标签】:“httpclient4.1 https ssl” 【正文】: 在现代的互联网环境中,安全的通信协议是至关重要的。HTTPS(HTTP over SSL/TLS)...

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

    我们可以创建一个信任所有证书的TrustManager,如下所示: ```java import javax.net.ssl.X509TrustManager; import java.security.cert.X509Certificate; public class NoopTrustManager implements X509...

    httpclient

    在Java编程环境中,HTTPClient库是一个非常重要的...此外,对于生产环境,通常会使用受信任的CA签发的证书,而不是自签名证书。总的来说,理解并正确实施HTTPClient的HTTPS双向认证对于保障网络通信的安全性至关重要。

    使用httpclient访问servlet

    如果Servlet需要HTTPS(SSL/TLS)加密,HttpClient需要配置SSLContext和TrustStrategy,处理证书和信任问题。 10. **最佳实践**: - 关闭响应实体和HttpClient实例以释放资源。 - 避免长时间持有HttpClient实例...

Global site tag (gtag.js) - Google Analytics