httpclient 无信任证书使用https

2 篇文章 0 订阅
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、其中信任任何证书的类

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值