ClientBuilder https请求时忽略SSL证书。

panda4671 / 2024-01-31 / 原文

在chrome中连接https时,有时被告知不是私密链接,手动可以继续。用java 代码进行https也遇到这种情况,可以 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法

附完整可用代码

import org.glassfish.jersey.jackson.JacksonFeature;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.ws.rs.client.*;
import javax.ws.rs.core.MediaType;

public class SensLevelHelper {
    public static void main(String[] args) throws Exception {
        ignoreSSLCert();
    }

    public static void ignoreSSLCert() throws Exception {
        Client testClient = ClientBuilder.newBuilder()
                .sslContext(createIgnoreVerifySSL())
                .hostnameVerifier((s1, s2) -> true).register(new JacksonFeature()).build();
        WebTarget webTarget = testClient.target("https://******");    // 这个网址需要忽略SSL证书
        System.out.println(webTarget.getUri());

        Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
        LogInHelper.PubKey publicKey = invocationBuilder.get(LogInHelper.PubKey.class);
        System.out.println(publicKey);
    }

    private static SSLContext createIgnoreVerifySSL() throws Exception {
        SSLContext sc = SSLContext.getInstance("TLSv1.3");

        // 实现一个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;
    }
}