У нас есть загрузочное веб-приложение Spring, которое использует сторонний REST API. В настоящее время сторонний API предоставлен с IP-адресом (без сопоставления доменного имени), и он превышает https.
В нашем приложении мы отключили проверки проверки имени хоста и некоторые другие настройки, используя приведенный ниже код. Тогда мы могли бы получить доступ к стороннему API без каких-либо проблем с SSL.
Это наша конфигурация шаблона отдыха:
@Bean
public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
Map valueMap = new HashMap<>();
valueMap.put("Authorization", "Bearer ");
valueMap.put("Content-Type", MediaType.APPLICATION_JSON_VALUE);
interceptors.add(new CalCustomInterceptor(valueMap));
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build();
SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(csf).setSSLHostnameVerifier(new NoopHostnameVerifier())
.build();
HttpComponentsClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
restTemplate.setInterceptors(interceptors);
return restTemplate;
}
Когда мы запускаем службу (как jar) на нашем сервере разработки, это работает нормально. Однако это не работает, когда приложение запускается в Docker-контейнере. Любая идея, почему это?
ОБНОВЛЕНИЕ: Ошибка при запуске внутри контейнера докера:
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target