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) {}
}};

 

해당 처리 방법은 보안 이슈가 발생 할 수 있으므로, 모든 해결 방안에는 해당되지 않을 것 같다.

반응형