Java
[JAVA] PKIX path building failed 오류 무시하기
봉주니
2022. 3. 16. 14:49
내부망에서 API 개발, 테스트를 진행 할 때, 발생하는 오류였다.
해당 API 주소의 인증서가 정확히 sectigo ssl 임에도 불구하고 오류가 발생하였다.
인증서 업데이트 정보를 제대로 못받아오는 듯 하다.
따라서, 내부망 통신이기에 인증서 오류를 무시하고자 하였다.
@Bean
public SSLConnectionSocketFactory getSSLSocketFactory()
throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
}};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sc,
new NoopHostnameVerifier());
return socketFactory;
}
@Bean(name = "customerHttpClient")
public CloseableHttpClient limsHttpClient()
throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {
int TIME_OUT = 30 * 1000;
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(
RegistryBuilder.<ConnectionSocketFactory> create().register("http",
PlainConnectionSocketFactory.getSocketFactory()).register("https", getSSLSocketFactory()).build());
connectionManager.setMaxTotal(100);
RequestConfig config = RequestConfig.custom().setConnectTimeout(TIME_OUT).setConnectionRequestTimeout(
TIME_OUT).setSocketTimeout(TIME_OUT).build();
CloseableHttpClient httpClient = HttpClientBuilder.create().setConnectionManager(
connectionManager).setDefaultRequestConfig(config).build();
return httpClient;
}
위와 같이 설정 후 실제 서비스에서는 아래와 같이 불러와 사용하였다.
@Autowired
@Qualifier("customerHttpClient")
private CloseableHttpClient limsHttpClient;
여기서 해당 인증서를 무시해주는 부분은 아래 부분이 동작해주고 있다.
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
}};
해당 처리 방법은 보안 이슈가 발생 할 수 있으므로, 모든 해결 방안에는 해당되지 않을 것 같다.
반응형