개발환경
OS : macOS 10.14
JAVA : JDK 1.8

URL API 연동을 하는데 다음과 같은 에러를 보게 되었다.

sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

찾아보니 JAVA 에서 HTTPS로 연결시, 해당 사이트의 SSL 인증서가 신뢰하는 기관 인증서목록에 없거나 SSL/TLS암호화 버전이 맞지 않는다거나. 다른 URL로는 정상적으로 연결이 되는 걸 보아서는 인증서 목록에 누락된 것에 무게를 두고 해결방법을 찾았다. 
해결방법은 JDK의 Cert Keystore에 해당 URL인증서를 넣어주면 된다.

1. InstallCert.java 다운로드

구글 코드에서 InstallCert.java 를 다운로드한다. 링크를 클릭하면 다운로드가 시작된다.


2. InstallCert.java 컴파일

다운로드 받은 InstallCert.java 를 컴파일 한다.

cd [다운로드 디렉토리]
javac InstallCert.java

    

 

3. InstallCert.java 구동

URL은 접속이 안되는 URL을 입력한다. 아래 예제에서는 naver.com을 샘플로 입력했다.
sudo java -cp ./ InstallCert [URL 명]

ihowon-ui-MacBook-Pro:downloads ihowon$ sudo java -cp ./ InstallCert naver.com
Loading KeyStore jssecacerts...
Opening connection to naver.com:443...
Starting SSL handshake...
[생략]
 4 Subject CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE
   Issuer  CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE
   sha1    02 fa f3 e2 91 43 54 68 60 78 57 69 4d f5 e4 5b 68 85 18 68
   md5     1d 35 54 04 85 78 b0 3f 42 42 4d bf 20 73 0a 3f
Enter certificate to add to trusted keystore or 'q' to quit: [1]

위의 cmd 화면에서 1을 입력 후 엔터키를 누르면 설정됨.
  
  
  
4. alias 설정

[앞부분 생략]
Added certificate to keystore 'jssecacerts' using alias 'naver.com-1

위에서 보이는 alias 명을 꼭 기억해야 한다. 이 부분을 통해 앞으로 설정을 계속할 것이다.
 
 
 
5. Cert Explort 해당 명령어를 통해 jssecacert를 export 한다.
keytool -exportcert -keystore jssecacerts -storepass changeit -file output.cert -alias [naver.com-1]
 
 
 
6. jssecacert를 Java Cert에 Import
sudo keytool -importcert -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit -file [4.에서 설정된 jssecacert.cert] -alias [URL Alias-1]

이부분에서 jssecacert.cert는 사용자가 직접 입력하는 cert파일명이다. 이 파일명이 설명하는 사이트마다 당연히 다르고, 이 부분에 대해 크게 언급이 없어서 꽤 삽질했다. 이를 사용하는 JDK의 디렉토리 내에 Import를 시켜준다고 보면 된다.

사용하는 JDK 버전이 여러개라면, 각각의 버전에 대해 설정을 해줘야 할 것이라 생각된다.


블로그 이미지

김생선

세상의 모든것을 어장관리

티스토리 툴바