사내 시스템들의 인증서를 모두 갱신 후 사내 시스템 A 에서 B 시스템에 요청을 할 경우 호출이 되지 않고 아래와 같은 에러가 발생했다.
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
이에 관련해서 조치한 내용을 정리하려 한다.
위와 같은 오류가 발생하는 이유는 여러가지가 있다.
등등 위와 같은 문제로 인해 발생했다는 걸 확인하고 클라이언트(시스템 A) 의 신뢰저장소(truststore)에 서버(시스템 B) 의 인증서를 등록해 보기로 했다.
(같은 인증서를 사용해서 신경쓰지 않았는데 문제가 발생했다....)
클라이언트(시스템 A) 에서 서버(시스템 B) 의 인증서를 다운받기 위해 아래와 같은 명령어를 사용했다.
openssl s_client -connect <hostname>:443 -showcerts
그럼 터미널 창에 인증서가 출력되는데 내용을 복사해 .crt
파일로 클라이언트(시스템 A) 에 저장한다.
서버(시스템 B) 의 인증서를 클라이언트(시스템 A) 의 신뢰저장소(truststore) 에 추가 하기 위해
클라이언트(시스템 A) 의 명령창에서 아래와 같은 명령을 수행했다.
keytool -importcert -trustcacerts -file <설정한 파일 이름>.crt -keystore <keystore_file> -alias <alias>
<keystore_file>
: 신뢰저장소(truststore) 파일 경로<alias>
: 인증서 식별을 위한 별칭.crt 의 기본 비밀번호는 changeit
이다.
위 방법을 통해 인증서를 등록하고 API 를 호출해보니 정상적으로 호출이 되는 것을 확인했다.
동일한 인증서를 사용해도 구성차이, 불완전한 인증서 체인 또는 일치하지 않는 도메인 이름으로 인해 문제가 발생할 수 있으므로 잘 확인해야겠다.