java HttpClient绕过https的ssl证书验证

3 篇文章 0 订阅
2 篇文章 0 订阅

我在另一篇文章里也有描述,因为标题是描述另一个问题的,所以再起一篇文章https://blog.csdn.net/qq_36951116/article/details/91493376

https请求时绕过ssl证书验证:

/**
     * 绕过验证
     *
     * @return
     * @throws NoSuchAlgorithmException
     * @throws KeyManagementException
     */
    public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {
        SSLContext sc = SSLContext.getInstance("SSLv3");

        // 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法
        X509TrustManager trustManager = new X509TrustManager() {
            @Override
            public void checkClientTrusted(
                    java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                    String paramString) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(
                    java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                    String paramString) throws CertificateException {
            }

            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };

        sc.init(null, new TrustManager[] { trustManager }, null);
        return sc;
    }

 

HttpClient  post请求:

 private static String doPost(String url, Map<String, String> headers, Map<String, String> param) throws Exception {
        HttpPost httpPost = new HttpPost(url);

        if (headers != null) {
            headers.forEach(httpPost::setHeader);
        }

        if (param != null) {
            List<NameValuePair> pairList = (List)param.entrySet().stream().map((e) -> {
                return new BasicNameValuePair((String)e.getKey(), (String)e.getValue());
            }).collect(Collectors.toList());
            httpPost.setEntity(new UrlEncodedFormEntity(pairList, "UTF-8"));
        }
//*********************这一段是为了绕过ssl验证****************
        //采用绕过验证的方式处理https请求
        SSLContext sslcontext = createIgnoreVerifySSL();

        // 设置协议http和https对应的处理socket链接工厂的对象
        Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.INSTANCE)
                .register("https", new SSLConnectionSocketFactory(sslcontext))
                .build();
        PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
        HttpClients.custom().setConnectionManager(connManager);

        //创建自定义的httpclient对象
        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
//***********************************

//如果不需要绕过ssl验证,使用下面这一行获取的httpclient就行
//       CloseableHttpClient httpClient = HttpClients.createDefault();

        Throwable var5 = null;

        Object var8;
        try {
            CloseableHttpResponse response = httpClient.execute(httpPost);
            Throwable var7 = null;

            try {
                var8 = EntityUtils.toString(response.getEntity());
            } catch (Throwable var31) {
                var8 = var31;
                var7 = var31;
                throw var31;
            } finally {
                if (response != null) {
                    if (var7 != null) {
                        try {
                            response.close();
                        } catch (Throwable var30) {
                            var7.addSuppressed(var30);
                        }
                    } else {
                        response.close();
                    }
                }

            }
        } catch (Throwable var33) {
            var5 = var33;
            throw var33;
        } finally {
            if (httpClient != null) {
                if (var5 != null) {
                    try {
                        httpClient.close();
                    } catch (Throwable var29) {
                        var5.addSuppressed(var29);
                    }
                } else {
                    httpClient.close();
                }
            }

        }

        return (String)var8;
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值