У нас есть загрузочное веб-приложение 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;
}
Когда мы запускаем службу (как банку) на нашем сервере разработки, это работает нормально. Однако это не работает, когда приложение работает внутри контейнера докеров. Есть идеи, почему это так?
ОБНОВЛЕНИЕ: ошибка при работе внутри контейнера докеров:
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
Обновлен вопрос с подробностями об исключении. Спасибо.
@ J4Priyan нашел ответы?
Какую ошибку выдает при запуске внутри докера?