잡담소장소

[java] PKIX path building failed 본문

Study ;3

[java] PKIX path building failed

유부뽀 2020. 12. 23. 16:57

https 이미지를 RestTemplate을 통해서 읽어오려고 하니 발생한 에러

www.lesstif.com/system-admin/java-validatorexception-keystore-ssl-tls-import-12451848.html

 

Java 에서 ValidatorException 등 인증서 관련 에러 해결 - keystore에 SSL/TLS 인증서를 import 하기

-----BEGIN CERTIFICATE----- MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw MDBaFw0yNDAyMjAxMDAwMDBaMEwxCzAJB

www.lesstif.com

 

해결방법을 검색해보니 

1. 모든 인증서를 신뢰하기

2. 필요한 인증서 추가

위와 같은 방법들이 있었고 1번은 지양했다

 

JAVA PKIX path building failed - 가리사니

``` java javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid ce...

gs.saro.me

 

문제가 된 곳은 외부연동쪽이다 보니 다양한 CDN 들이 들어와서 발생할때마다 일일히 예외처리할 수 없으니

1번을 하되 이미지를 가져오는 부분에다가 추가 하는 것이 좋다고 생각했다.

 

RestTemplate 인스턴스 생성할 때 파라메터를 받는 생성자를 하나 더 만들어서 requestFactory를 아래와 같이 return 하도록 추가했다.

 

public ClientHttpRequestFactory getAllTrustRequestFactory() 
                throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
    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)
                    .build();

    HttpComponentsClientHttpRequestFactory requestFactory =
                    new HttpComponentsClientHttpRequestFactory();
	requestFactory.setHttpClient(httpClient);
    return requestFactory;
 }

PoolingHttpClientConnectionManager를 사용시에는 생성자에 ConnectionSocketFactoryRegistry 파라메터로 입력하여 생성한다

 

Ignoring SSL certificate in Apache HttpClient 4.3

How to ignore SSL certificate (trust all) for Apache HttpClient 4.3? All the answers that I have found on SO treat previous versions, and the API changed. Related: How to ignore SSL certificate ...

stackoverflow.com

Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder
        .<ConnectionSocketFactory> create().register("https", sslsf)
        .build();

PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(
        socketFactoryRegistry);
CloseableHttpClient httpclient = HttpClients.custom()
        .setConnectionManager(cm).build();
반응형
Comments