您的位置:首页 > 理论基础 > 计算机网络

证书不安全解决HttpClient 如何忽略证书验证 - ALLOW_ALL_HOSTNAME_VERIFIER

2017-08-03 17:33 4666 查看
HttpClient 如何忽略证书验证 - ALLOW_ALL_HOSTNAME_VERIFIER

 

1。设置可以访问HTTPS

 

Function - getNewHttpClient 

 

Java代码  


/**  

    * @Title: getNewHttpClient  

    * @Description: Methods Description 

    * @param @return     

    * @return HttpClient  

    * @throws  

    */   

      

    private HttpClient getNewHttpClient() {  

        try {  

            KeyStore trustStore = KeyStore.getInstance(KeyStore  

                    .getDefaultType());  

            trustStore.load(null, null);  

            SSLSocketFactory sf = new SSLSocketFactory(trustStore);  

            sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  

            HttpParams params = new BasicHttpParams();  

            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);  

            HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);  

            SchemeRegistry registry = new SchemeRegistry();  

            registry.register(new Scheme("http", PlainSocketFactory  

                    .getSocketFactory(), 80));  

            registry.register(new Scheme("https", sf, 443));  

            ClientConnectionManager ccm = new ThreadSafeClientConnManager(  

                    params, registry);  

            return new DefaultHttpClient(ccm, params);  

        } catch (Exception e) {  

            return new DefaultHttpClient();  

        }  

    }  

 

2.忽略证书验证 

 

Class: SSLSocketFactory

 

Java代码  


import java.io.IOException;  

import java.net.Socket;  

import java.net.UnknownHostException;  

import java.security.KeyManagementException;  

import java.security.KeyStore;  

import java.security.KeyStoreException;  

import java.security.NoSuchAlgorithmException;  

import java.security.UnrecoverableKeyException;  

import java.security.cert.CertificateException;  

import java.security.cert.X509Certificate;  

import javax.net.ssl.SSLContext;  

import javax.net.ssl.TrustManager;  

import javax.net.ssl.X509TrustManager;  

import org.apache.http.conn.ssl.SSLSocketFactory;  

  

  

public class SSLSocketFactory extends SSLSocketFactory {  

    /**  

    * @Fields sslContext  

    * @Description: Field Description 

    */  

    SSLContext sslContext = SSLContext.getInstance("TLS");  

  

    /**  

    * <p>Title: </p>  

    * <p>Description: </p>  

    * @param truststore 

    * @throws NoSuchAlgorithmException 

    * @throws KeyManagementException 

    * @throws KeyStoreException 

    * @throws UnrecoverableKeyException  

    */  

    public SSLSocketFactory(KeyStore truststore)  

            throws NoSuchAlgorithmException, KeyManagementException,  

            KeyStoreException, UnrecoverableKeyException {  

        super(truststore);  

        TrustManager tm = new X509TrustManager() {  

            public void checkClientTrusted(X509Certificate[] chain,  

                    String authType) throws CertificateException {  

            }  

  

            public void checkServerTrusted(X509Certificate[] chain,  

                    String authType) throws CertificateException {  

            }  

  

            public X509Certificate[] getAcceptedIssuers() {  

                return null;  

            }  

        };  

        sslContext.init(null, new TrustManager[] { tm }, null);  

    }  

  

    /* (non-Javadoc) 

    * <p>Title: createSocket</p>  

    * <p>Description: </p>  

    * @param socket 

    * @param host 

    * @param port 

    * @param autoClose 

    * @return 

    * @throws IOException 

    * @throws UnknownHostException  

    * @see org.apache.http.conn.ssl.SSLSocketFactory#createSocket(java.net.Socket, java.lang.String, int, boolean)  

    */  

    @Override  

    public Socket createSocket(Socket socket, String host, int port,  

            boolean autoClose) throws IOException, UnknownHostException {  

        return sslContext.getSocketFactory().createSocket(socket, host, port,  

                autoClose);  

    }  

  

    /* (non-Javadoc) 

    * <p>Title: createSocket</p>  

    * <p>Description: </p>  

    * @return 

    * @throws IOException  

    * @see org.apache.http.conn.ssl.SSLSocketFactory#createSocket()  

    */  

    @Override  

    public Socket createSocket() throws IOException {  

        return sslContext.getSocketFactory().createSocket();  

    }  

}  

 

 

3。调用并用HTTPS访问

 

Java代码  


HttpClient httpclient =getNewHttpClient();  

HttpGet httpPost = new HttpPost(httpGetUrl);  

HttpResponse response = httpclient.execute(httpGet);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java http https 证书
相关文章推荐