Рубрики
Без рубрики

Отключите проверку SSL-сертификата в Spring RestTemplate

Мы часто сталкиваемся с проблемой сертификата при использовании шаблона Rest. RestTemplate может дать любое из приведенных ниже… Помеченный как java, безопасность, ssl.

Мы часто сталкиваемся с проблемой сертификата при использовании шаблона Rest.

RestTemplate может выдать любую из приведенных ниже ошибок, если SSL-сертификат целевого хоста недействителен:

  • Не удалось построить путь PKIX: Не удалось построить путь PKIX:

  • Не удалось построить путь PKIX: путь sun.security.provider.certpath.Исключение SunCertPathBuilderException: не удается найти допустимый путь сертификации к запрошенной цели javax.net.ssl. Исключение SSLHandshakeException: не удалось построить путь PKIX

Причин недействительного SSL-сертификата может быть множество, в том числе:

  1. Сертификат с истекшим сроком действия
  2. Самозаверяющий сертификат
  3. Неверная информация о хосте в сертификатах
  4. Отозванный сертификат
  5. Ненадежный корень сертификата

Как мы справляемся с этим в производственной и непроизводственной среде?

В среде production мы обычно добавляем необходимые сертификаты в хранилище ключей нашего приложения, что позволяет нам успешно выполнить запрос HTTPS.

В непроизводственных средах при разработке приложения нам часто приходится отключать проверку ssl-сертификата (самоподписанный, с истекшим сроком действия, ненадежный root и т. Д.) поскольку мы не хотим испытывать трудности с созданием соответствующих сертификатов и управлением хранилищем ключей для целей тестирования.

Итак, мы настраиваем RestTemplate , чтобы отключить проверку SSL (среда, не связанная с prod), и, таким образом, доверяем всем видам сертификатов, независимо от того, действительны они или нет в Spring Boot RestTemplate, и разрешаем http-запросы к хостам без исключения.

public RestTemplate restTemplate() 
                throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
    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);
    return restTemplate;
 }

Примечание: Избегайте проверки SSL для RestTemplate только для среды разработки.

В производственной среде мы должны выполнять управление сертификатами и проверку SSL, так как отключение проверки SSL может привести к угрозам безопасности.

Оригинал: “https://dev.to/mnpaa/disable-skip-ssl-validation-in-springboot-resttemplate-1ec2”