Wir verwenden Spring Boot 2.5.1, Spring 5.3.9 und Java JDK 11.0.13.
Bei uns wird eine javax.net.ssl.SSLPeerUnverifiedException gefangen, wenn ein Bild von einer Webseite kopiert werden soll, die nur über HTTPS erreichbar ist. Wir würden gerne machen, dass es das einfach ignorieren soll und das Bild herunterladen soll. Wir dachten, dass wir das bereits getan haben. Das ist unsere AppConfig-Klasse:
Bei uns wird eine javax.net.ssl.SSLPeerUnverifiedException gefangen, wenn ein Bild von einer Webseite kopiert werden soll, die nur über HTTPS erreichbar ist. Wir würden gerne machen, dass es das einfach ignorieren soll und das Bild herunterladen soll. Wir dachten, dass wir das bereits getan haben. Das ist unsere AppConfig-Klasse:
Java:
@Configuration
public class AppConfig {
@Bean
@Primary
public RestTemplate restTemplate(final RestTemplateBuilder restTemplateBuilder) {
try {
return AppConfig.turnOffSslChecking(restTemplateBuilder);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return restTemplateBuilder
.setConnectTimeout(Duration.ofMillis(60000))
.setReadTimeout(Duration.ofMillis(60000))
.build();
}
/**
* @param restTemplateBuilder
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
*/
private static RestTemplate turnOffSslChecking(RestTemplateBuilder restTemplateBuilder) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException {
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)
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.build();
HttpComponentsClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
RestTemplate restTemplate = restTemplateBuilder
.requestFactory(() -> requestFactory)
.setConnectTimeout(Duration.ofMillis(60000))
.setReadTimeout(Duration.ofMillis(60000))
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.defaultHeader(HttpHeaders.ACCEPT_CHARSET, "UTF-8")
.defaultMessageConverters()
.build();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
messageConverters.add(new ByteArrayHttpMessageConverter());
messageConverters.add(new StringHttpMessageConverter());
messageConverters.add(converter);
restTemplate.setMessageConverters(messageConverters);
return restTemplate;
}
}