Использование System.setProperty ("jdk.internal.httpclient.disableHostnameVerification", Boolean.TRUE.toString ()); Java - PullRequest
0 голосов
/ 21 апреля 2020

Я написал фрагмент кода, который будет взаимодействовать с удаленными серверами http без проверки сертификата удаленного сервера.

System.setProperty("jdk.internal.httpclient.disableHostnameVerification", Boolean.TRUE.toString());
HttpClient httpClient = HttpClient.newBuilder().sslContext(getSSLContext()).build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());


private static SSLContext getSSLContext() throws NoSuchAlgorithmException, KeyManagementException {
        //Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }

                    public void checkClientTrusted(X509Certificate[] certs, String authType) {
                    }

                    public void checkServerTrusted(X509Certificate[] certs, String authType) {
                    }
                }
        };

        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        return sc;
    }

Как влияет приведенный выше код, если для строки кода ниже установлено значение true

System.setProperty("jdk.internal.httpclient.disableHostnameVerification", Boolean.TRUE.toString());

Не обнаружите никакой разницы, существует ли указанная строка кода или нет.

Пожалуйста, помогите мне, как использовать disableHostnameVerification в приведенном выше сценарии? Нужно ли устанавливать его или он потерпит неудачу в некоторых случаях, если он не установлен?

...