如何为给定 url 或 restTemplateBuilder 禁用 SSL?

How to disable SSL for given url or for restTemplateBuilder?

我需要为给定的 url 或 restTemplate 禁用 SSL,我知道我可以使用下面的代码禁用所有 SSL。我怎样才能为给定的 URL 编写此代码。或者如何为 restTemplate 禁用它。

 public class SSLTool {

            public static void disableCertificateValidation() {
                // Create a trust manager that does not validate certificate chains
                        TrustManager[] trustAllCerts = new TrustManager[] {
                                new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                                                return new X509Certificate[0];
                                            }
                    public void checkClientTrusted(X509Certificate[] certs, String authType) {}
                    public void checkServerTrusted(X509Certificate[] certs, String authType) {}
                }};
        
                        // Ignore differences between given hostname and certificate hostname
                                HostnameVerifier hv = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) { return true; }
        };
        
                        // Install the all-trusting trust manager
                                try {
                        SSLContext sc = SSLContext.getInstance("SSL");
                        sc.init(null, trustAllCerts, new SecureRandom());
                        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
                        HttpsURLConnection.setDefaultHostnameVerifier(hv);
                    } catch (Exception e) {/* intentionally left blank */}
            }
}

返回 RestTemplate 禁用 SSL 可以通过以下实现(您可以根据需要添加其他属性。):

CloseableHttpClient client = HttpClients.custom().setSSLHostnameVerifier(new HostnameVerifier() {

            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        }).setSSLHostnameVerifier(new HostnameVerifier() {

            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        }).build();
        HttpComponentsClientHttpRequestFactory req = new HttpComponentsClientHttpRequestFactory(client);
        RestTemplate template = new RestTemplate(req);

我用下面的代码解决了这个问题。这是来源

的 link
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;

SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
        .loadTrustMaterial(null, acceptingTrustStrategy)
        .build();

SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);

CloseableHttpClient httpClient = HttpClients.custom()
        .setSSLSocketFactory(csf)
        .build();

HttpComponentsClientHttpRequestFactory requestFactory =
        new HttpComponentsClientHttpRequestFactory();

requestFactory.setHttpClient(httpClient);

RestTemplate restTemplate = new RestTemplate(requestFactory);