본문 바로가기
  • 개발하는 곰돌이
Development/Errors

[SSL] 외부 API 호출 중 발생한 unable to find valid certification path to requested target 에러 해결

by 개발하는 곰돌이 2023. 1. 2.

에러 발생 배경

프로젝트 진행 중 외부 API를 호출하여 받아온 결과값을 가공해야할 일이 생겼다. 그래서 WebClient를 사용하여 외부 API를 호출하고 가공하여 진행하려고 했는데 다음과 같은 에러가 발생했다.

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

구글링을 해보니 Https를 사용하는 웹사이트에 연결을 시도할 때 Java에서 신뢰하는 인증서 목록에 해당 웹사이트의 인증서가 존재하지 않아서 발생하는 문제라고 한다. 즉, Java에서 신뢰하는 인증서 목록에 해당 웹사이트의 인증서를 추가해주면 문제가 해결된다.

인증서 추출

사이트의 인증서는 웹 브라우저에서 간단하게 추출할 수 있다. 본 포스트에서는 Windows/Google Chrome 기준으로 작성한다.

 

1. 주소창 옆의 자물쇠 아이콘을 클릭하여 '이 사이트는 보안 연결(HTTPS)이 사용되었습니다.' 클릭

2. '인증서가 유효함' 클릭

3. '내보내기(X)...'을 클릭하여 인증서 파일 저장

Java에서 신뢰하는 인증서 목록에 인증서 등록

인증서를 추출했으니 이제 Java에서 신뢰하는 인증서 목록에 추출한 인증서를 등록해야한다. Power Shell을 관리자 권한으로 실행하여 다음 명령어를 입력한다.

keytool.exe -import -alias {인증서 별칭} -keystore "{자바 JRE 경로}\lib\security\cacerts" -storepass changeit -file "{인증서 파일 경로}"

명령어를 입력하면 추가를 할것인지 물어보는데 y나 yes를 입력하면 성공적으로 인증서가 추가되었다는 메시지가 뜬다.

인증서가 추가되었으면 프로젝트를 재실행하여 결과를 확인한다.

정상적으로 API가 호출된 것을 확인할 수 있다.

댓글