java 发起HTTPS请求无证书报错问题

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);  
  6.  
  7.  
  8.  
  9.  
  10.  

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

 

转载自https://hougbin.iteye.com/blog/1196063

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值