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

httpclient 无信任证书使用https

    博客分类:
  • JAVA
 
阅读更多

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

HttpClient http = new HttpClient();
String url = "https://payment.cib.com.cn/payment/api/rest";
Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443); 
Protocol.registerProtocol("https", myhttps); 
PostMethod post = new PostMethod(url);

 

 

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

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.ProtocolSocketFactory;



/**
 * author by lpp
 *
 * created at 2010-7-26 上午09:29:33
 */
public class MySSLProtocolSocketFactory implements ProtocolSocketFactory {

  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[]{}; 
      } 
  }   


}

 

分享到:
评论
8 楼 Ruby_lgr 2018-10-17  
这样写了还是绕不过证书呢
7 楼 shihengli2010 2018-01-19  
li2hengyuan 写道
楼主  MySSLProtocolSocketFactory这个类要继承SecureProtocolSocketFactory
按照你的写法,我弄了一下午也没找出原因,后面看了Protocol的构造方法,看到有instanceof SecureProtocolSocketFactory这么一节,尝试改了下继承,才可以访问

可能你们的httpclient版本不一致
6 楼 wangyudong 2017-11-27  
很多API doc生成工具生成API文档需要引入第三方依赖,重度依赖在代码里加注解的方式,并且不支持自动化测试RESTful API。

之前习惯用一款名字为 WisdomTool REST Client,它能够基于测试过的历史记录自动生成精美的RESTful API文档。完全不用引入第三方依赖,不用在代码里添加任何注解。完全跟API代码脱离,任何用户即使不了解API代码,也能够使用WisdomTool REST Client生成API文档。并且支持自动化测试RESTful API,输出精美的测试报告。
轻量级的工具,功能却很精悍哦!

https://github.com/wisdomtool/rest-client

Most of API doc tools do not support automated testing.

Once used a tool called WisdomTool REST Client supports automatically generating exquisite RESTful API documentation based on history testing cases without adding annotations to the code, it also supports automated testing, and outputs exquisite report.

Lightweight tool with very powerful features!

https://github.com/wisdomtool/rest-client
5 楼 xlzxlw 2016-11-28  
     
多谢大师!
帮到我了!
这个类很有用!!
感谢!!!
4 楼 li2hengyuan 2016-01-19  
楼主  MySSLProtocolSocketFactory这个类要继承SecureProtocolSocketFactory
按照你的写法,我弄了一下午也没找出原因,后面看了Protocol的构造方法,看到有instanceof SecureProtocolSocketFactory这么一节,尝试改了下继承,才可以访问
3 楼 wanggod 2015-12-08  
yes 帮到我了
2 楼 narutobingbing 2015-07-01  
bingo
1 楼 8学5术 2014-09-09  
你好,我本地写个main方法可以调用远程文件到本地,但是在websphere6.1+IBM自带jdk1.5下,报java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:413)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:274)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:261)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:557)
at com.ibm.jsse2.pc.connect(pc.java:312)
at com.ibm.jsse2.pc.<init>(pc.java:360)
at com.ibm.jsse2.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:14)
at com.ccs.web.MySSLProtocolSocketFactory.createSocket(MySSLProtocolSocketFactory.java:81),能帮忙解决下问题吗,谢谢!

相关推荐

    httpclient来进行https访问

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

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

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

    httpclient 绕开HTTPS证书校验

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

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

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

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

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

    JAVA利用HttpClient进行HTTPS接口调用

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

    httpClient自动接受https的证书代码

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

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

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

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

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

    HttpClient之Https应用实例

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

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

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

    java 发送https 请求 证书

    在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种基于HTTP协议的安全通信方式,它通过SSL/...通过这些方法,你可以确保与不信任证书的服务器安全通信。记住,处理证书时务必小心,避免引入安全隐患。

    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...

    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...

Global site tag (gtag.js) - Google Analytics