728x90
# 에러 :
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
# 원인 :
보통 검증되지 않은 인증서 즉 사설 인증서를 사용한 사이트에서 해당 소스의 api를 불러올때 나옴.
# 해결 :
1. 해당 사이트에서 인증서 사서 쓰기. (해당 사이트의 소스를 부르는쪽, 요청을 받는 쪽 사이트에서 사설 인증서 말고 검증된 인증서 사서 쓰기)
2. 요청을 보내는 쪽, 즉 당신의 Spring Boot 서버에서 SSL 인증서 검증을 비활성화하는 방식.
서버에서 사설 인증서 문제를 무시하고 요청을 처리할 수 있도록 설정
springboot 3.0x 버전을 이용한 방식으로, 2.xx 버전은 안됨. 아예 내용이 바껴서 이용하면 에러 발생함.
@Configuration
public class AppConfig {
@Bean
@Primary
public RestTemplate restTemplate() throws Exception {
// SSLContext 설정 (모든 인증서 신뢰)
SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial(new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] chain, String authType) {
return true; // 모든 인증서 신뢰
}
})
.build();
// PoolingHttpClientConnectionManager 설정
PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
.setSSLSocketFactory(
SSLConnectionSocketFactoryBuilder.create()
.setSslContext(sslContext) // 무시 설정된 SSLContext 적용
.build()
)
.build();
// CloseableHttpClient 생성
CloseableHttpClient httpClient = HttpClients
.custom()
.setConnectionManager(connectionManager)
.build();
// RestTemplate에 HttpClient 설정
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
return new RestTemplate(factory);
}
}