본문 바로가기
웹/Spring Boot

Spring Boot Rest API 호출 시, PKIX path validation failed

by 주사휘 2021. 4. 12.
반응형

* Spring boot 에서 다른 API서버의 Rest api를 호출 할 경우(HTTPS), 아래와 같은 에러 발생

 

Tomcat Error 메세지

 

  • 원인
    • 1. 연결하고자 하는 https 서버의 인증서가 신뢰하는 인증기관 인증서목록에 빠져있음(keystore)
    • 2. 서버/클라이언트간 사용하려는 SSL/TLS 버전이 맞지 않음.(TLS 1.0만 지원하는 서버에 1.2로 HandShaking요청)
    • 3. SSL/TLS 통신에 사용하려는 cipher suite가 오래되거나, 지원하지 않음(JDK 1.8부터는 RC4를 사용하면 에러)
  • 해결
    • 여기서는 1번 원인인 경우의 해결책만을 제시한다.
    • 1. gist에서 InstallCert.java 다운로드
      • # curl -O gist.githubusercontent.com/lesstif/cd26f57b7cfd2cd55241b20e05b5cd93/raw/InstallCert.java
    • 2. 컴파일
      • # javac InstallCert.java
    • 3. InstallCert 구동
      • localhost에 ssl인증서를 받아올 호스트명을 입력
        • java -cp ./ InstallCert {testdomain.com}
          • ex) java -cp ./ InstallCert naver.com

CN이 호스트명과 일치하는 번호를 입력한다. (필자는 1누르고 엔터)

  • 4. 아래 메세지가 나오면, keystore 부분과 alias 명을 기억해놓는다.
    • Added certificate to keystore 'jssecacerts' using alias 'domainse-1'
  • 5. keytool 로 keystore에서 인증서 추출(keystore암호 : changeit 으로 가정하고 진행)
    • keytool -exportcert -keystore jssecacerts -storepass changeit -file output.cert -alias domainse-1
  • 6. 현재 JDK 의 keystore에 cert import
    • keytool -importcert -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit -file output.cert -alias domainse-1
  • 7. Tomcat 재시작

 

 

반응형