https繞過證書認證請求 Get或Post請求(證書過期,忽略證書)


報錯信息

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

  1. 如果證書過期,配置容器為http請求,就可搞定。
  2. 如果postman請求遇到此情況:Could not get any response

postman請求提示

解決:

postman方式

  1. 打開postman ---> File ---> Settings
    配置
  2. 關閉圖片紅框里的SSL..選項為OFF

這樣就可以了.

java請求

直接貼代碼了。

/**
     * 采用繞過驗證的方式處理https請求
     * @param url
     * @param json
     * @return
     */
    public static String doGet(String url, JSONObject json) {
        String body = "";
        SSLContext sslcontext = null;
        try {
            //設置協議http和https對應的處理socket鏈接工廠的對象
            sslcontext = createIgnoreVerifySSL();
            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 client = HttpClients.custom().setConnectionManager(connManager).build();
            //處理請求參數拼接(參數為json) 如:?name = ""&pwd = ""
            String param = changeJsonToArguments(json);
            String urlNameString = url + param;
            //創建get方式請求對象
            HttpGet get = new HttpGet(urlNameString);
            //指定報文頭Content-type、User-Agent
            //get.setHeader("Content-type", "application/x-www-form-urlencoded");
            get.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
            //執行請求操作,並拿到結果(同步阻塞)
            CloseableHttpResponse response = client.execute(get);
            //獲取結果實體
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                //按指定編碼轉換結果實體為String類型
                body = EntityUtils.toString(entity, "UTF-8");
            }
            EntityUtils.consume(entity);
            //釋放鏈接
            response.close();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
    }finally{

        }
        return body;
    }

    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) {
            }

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

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

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

有幫助請留言...

更多文章:www.ipooli.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM