httpclient 无信任证书使用https

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


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值