zoukankan      html  css  js  c++  java
  • Java httpclient.CloseableHttpClient跳过https证书验证

    本文转自:https://www.cnblogs.com/jtwbdm/p/11507121.html

    当初联调某网站API(https),对方却未提供SSL证书,且一再强调无需证书,只好通过搜索网络资源设法绕过HTTPS证书验证。

    原文博主的方法正好符合我的需求,转载至此以做个人记录。

    正文:

        调用SkipHttpsUtil.wrapClient方法获取httpclien对象,通过该对象(可强转为CloseableHttpClient)发送请求,即可跳过https证书验证。

    skipHttpsUtil类


    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.client.HttpClient;
    import org.apache.http.conn.ssl.NoopHostnameVerifier;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.log4j.Logger;

    /**
     * Description: httpclient跳过https验证
     */
    public class SkipHttpsUtil {
        private static Logger logger = Logger.getLogger(SkipHttpsUtil.class);
        //绕过证书
        public static HttpClient wrapClient() {
            try {
                SSLContext ctx = SSLContext.getInstance("TLS");
                X509TrustManager tm = new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }
     
                    public void checkClientTrusted(X509Certificate[] arg0,
                            String arg1) throws CertificateException {
                    }
     
                    public void checkServerTrusted(X509Certificate[] arg0,
                            String arg1) throws CertificateException {
                    }
                };
                ctx.init(null, new TrustManager[] { tm }, null);
                SSLConnectionSocketFactory ssf = new SSLConnectionSocketFactory(
                        ctx, NoopHostnameVerifier.INSTANCE);
                CloseableHttpClient httpclient = HttpClients.custom()
                        .setSSLSocketFactory(ssf).build();
                return httpclient;
            } catch (Exception e) {
                return HttpClients.createDefault();
            }
        }    
    }

  • 相关阅读:
    如何找出数组中重复次数最多的数
    如何计算两个有序整型数组的交集
    如何分别使用递归与非递归实现二分查找算法
    如何用递归算法判断一个数组是否是递增
    如何用一个for循环打印出一个二维数组
    如何用递归实现数组求和
    ElasticSearch安装和head插件安装
    SpringBoot全局异常处理方式
    Redis高级命令操作大全--推荐
    Mysql中FIND_IN_SET和REPLACE函数简介
  • 原文地址:https://www.cnblogs.com/yan-zm/p/11896856.html
Copyright © 2011-2022 走看看