주니봉
  • [JAVA] PKIX path building failed 오류 무시하기
    2022년 03월 16일 14시 49분 53초에 업로드 된 글입니다.
    작성자: 봉주니

    내부망에서 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) {}
    }};

     

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

    반응형
    댓글