SSL/TLS 에서 자주 겪는 에러는 다음과 같이  ValidatorException PKIX path building failed 입니다.

이 에러는 주로 통신 상대방이 사용하는 인증서의 CA 인증서가 내가 사용하는 keystore 에 등록되지 않았을 경우 발생합니다.

[Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:
CODE


Portecle 는 Java 로 개발된 GUI 기반의 Key store  관리 유틸리티로 keytools 명령어에 익숙하지 않아도 keystore 에 인증서를 넣고 뺄 수 있습니다.


설치하려면 portecle 프로젝트 사이트 에서 다운로드후 압축을 해제 하고 다음 명령어로 실행하면 됩니다.

java -jar portecle.jar
JAVA

그러면 다음과 같은 프로그램이 표시됩니다.

CA 인증서 넣기

CA 인증서 추출

인증서를 넣으려면 먼저 상대의 인증서를 가져와야 하므로 메뉴에서 Examine SSL/TLS Connection: 을 선택합니다.


상대방의 host name 이나 IP 와 Port 번호를 넣고 OK 를 클릭합니다.

서버에서 CA 인증서를 같이 배포할 경우 상단의 우측 버튼(1)이 활성화되고 클릭할 경우 CA 인증서 정보를 볼 수 있습니다.

2번 Subject 는 인증서가 적용된 사이트 이름이고 3번 Issuer 는 발급자 (CA) 의 이름으로 Let's encrypt 를 사용하는 것을 알수 있습니다.


이제 상단의 다음 버튼을 클릭해서 CA 인증서 정보로 넘어간 후에 하단의 "PEM Encoding" 을 클릭합니다.

그러면 인증서 정보창이 뜨는데 Save  를 클릭해서 CA 인증서를 저장해 줍니다.


Key store 에 인증서 넣기

메뉴에서 File  → Open Keystore File  을 선택합니다.


사용하는 JDK 나 JRE 경로(예: /usr/java/jdk11/) 로 간 후에 lib/security 폴더의 cacerts 파일을 선택하고 열기를 클릭합니다.


암호를 묻는 창이 뜨는 설정한 keystore 의 암호를 입력합니다. 별도로 설정한 적이 없다면 기본 암호인 changeit 을 입력합니다.


등록한 CA 인증서의 목록이 표시되는데 Tools  → Import Trusted Certificate  메뉴를 선택합니다.


인증서 경로를 묻는 창에는 CA 인증서 추출  항목에서 저장한 인증서의 경로를 설정합니다.


key store 내 저장할 alias 를 묻는데 특별한 이유가 없다면 기본 값으로 설정하고 OK  를 누릅니다.


그러면 정상적으로 import 되었다는 메시지가 표시됩니다.

확인

오류가 나는 사이트에 java 로 연결해서 해결되었는지 확인해 보면 됩니다.

사용하는 JDK 나 JRE 가 업그레이드될 경우 매번 이 작업을 해줘야 합니다.(상대방이 사용하는 인증서 CA 가 JDK 에 포함되어 있으면 필요없습니다.)


같이 보기


Ref