Я написал фрагмент кода, который будет взаимодействовать с удаленными серверами 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 в приведенном выше сценарии? Нужно ли устанавливать его или он потерпит неудачу в некоторых случаях, если он не установлен?