본문 바로가기
개발일지/개발중

JAVA에서 PKIX path building failed 에러 났을 때 해결 방법

by 세 미 콜 론 2021. 1. 10.
728x90
반응형

최근 REST API를 이용해 토큰을 받아오고 그 토큰을 이용해 콘텐츠를 얻어오는 개발을 진행하게 됐다.

모든 것이 순조롭게 끝날 줄만 알았던 그 때, 예상하지 못한 에러를 만났다.

바로 PKIX path building failed .. ! 

 

개발 방식은 아래와 같았다.

 

- 호출할 API 주소 만들기

- url 주소 변수에 담기 (https 로 시작)

- https커넥션을 이용해서 post 방식으로 인증 정보 보내기 

- 받아온 토큰을 변수에 저장해 콘텐츠 얻는 api 호출하여 최종적으로 리턴하기

 

에러는 다음과 같았다. 

 

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

해당 에러가 발생하는 원인은 바로 인증서.

웹브라우저에서는 신뢰하는 인증서로 확인되는 경우에도 발생한다고 한다.

웹브라우저 인증서 확인 방법은 다음과 같다.

 

크롬 인터넷 창에서 주소줄 왼쪽 자물쇠를 클릭한다.

그리고 여기에서 인증서 : (유효)를 클릭해준다.

티스토리의 인증서 정보를 확인할 수 있었다.

아무튼 이렇게 인증서를 확인해보면 분명 유효한데 왜 PKIX 에러가 발생하는걸까?

그것은 SSL 연결 시 HANDSHAKE가 어떤 방식으로 진행되는지를 확인하면 된다.

 

1. 클라이언트가 CA로부터 발급받은 인증서로 서비스하는 서버와 연결

2. 서버가 전송한 인증서가 CA로부터 제대로 발급받은 것인지 확인.

3. 클라이언트는 CA와 공개키 목록을 보유(신뢰하고 있음)

4. 신뢰할 수 있는 CA로부터 발급된 인증서라고 확인을 마치면 CA의 공개키를 이용하여 인증서 복호화

5. 세션키 값을 만들어 인증서에 저장된 서버의 공개키로 암호화하여 서버로 전송 진행

6. 세션키로 암호화된 요청 전송 

 

PKIX 어쩌구 에러는 바로 2번과 3번에서 발생하게 된다.

클라이언트가 신뢰하고 있는 인증서가 발급한 CA 목록에 없기 때문에 발생하는 에러이다.

따라서 아래와 같은 명령어를 이용해 해결할 수 있다.

 

keytool -import -alias mycert -keystore $JAVA_HOME/lib/security/cacerts -file my.crt
Enter keystore password:

 

728x90
반응형

댓글