1、java如何跳过SSL的证书验证

发布于 2022年 02月 08日 16:11

在连接开始前,调用trustAllHttpsCertificates()方法即可

    @Test
    public void test08(){
        String message = "orderToken=2016081516204941291387764" +
                "&orderMoney=10.8"+"&OrderStatus=10";
        try{
            trustAllHttpsCertificates();
            URI uri = new URI("https://br-payment.xcloudgame.com/index.php?
                    s=/PagSmile/pay_callback/order_id/P-SMILE-147134625445/gid/2");
            SimpleClientHttpRequestFactory schr = new SimpleClientHttpRequestFactory();
            ClientHttpRequest request = schr.createRequest(uri, HttpMethod.POST);
            request.getBody().write((message).getBytes());
            ClientHttpResponse response = request.execute();
            String resultString = new String(FileCopyUtils.copyToByteArray(response.getBody()));
            System.out.println("resultString=" + resultString);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    // 跳过SSL验证 ,在获取connection之前调用这个方法 trustAllHttpsCertificates
    private static void trustAllHttpsCertificates() throws Exception {
        javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
        javax.net.ssl.TrustManager tm = new miTM();
        trustAllCerts[0] = tm;
        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
                .getInstance("SSL");
        sc.init(null, trustAllCerts, null);
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
                .getSocketFactory());
    }
    static class miTM implements javax.net.ssl.TrustManager,
            javax.net.ssl.X509TrustManager {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        public boolean isServerTrusted(
                java.security.cert.X509Certificate[] certs) {
            return true;
        }
        public boolean isClientTrusted(
                java.security.cert.X509Certificate[] certs) {
            return true;
        }
        public void checkServerTrusted(
                java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }
        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }
    }

推荐文章