Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://www.xxxx.xxx": PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] with root cause
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
RestTemplate을 이용해 백엔드에서 다른 서버로 Rest API 요청을 했는데 이런 에러가 발생했다.
원인은 JVM(jdk, jre) 에서 따로 관리하는 SSL 인증서 저장소에 Rest API를 요청받는 쪽의 인증서가 등록되어 있지 않아서이다.
Window 환경에서 이 에러가 발생하면, 우선 인증서 파일을 다운받는다.
인증서 파일을 다운받는 법은 인증서를 등록하고자 하는 사이트로 들어가서
이 연결은 안전합니다. > 인증서가 유효함 > 세부정보 에서 내보내기를 클릭하면 다운받을 수 있다. crt나 cer 파일이 내려받아질 것이다.
[JAVA_HOME]\bin ( ※ JAVA_HOME은 jdk나 jre가 설치된 경로를 말한다. )
인증서를 다운받았다면 위의 경로에서 cmd를 관리자 권한으로 열어서 다음 명령어를 입력하여 인증서 저장소에 인증서를 등록해준다.
keytool -import -keystore "[Java_HOME]\lib\security\cacerts" -file [crt나 cer 파일 경로] -alias [등록할 인증서 별칭]
비밀번호를 치라고 하면 changeit 을 입력한다.
Linux 환경에서도 root 권한으로 같은 명령어를 입력하여 cacerts 파일에다가 인증서를 등록해주면 된다.
인증서를 등록했다면 실행 중이던 서버를 중지하고 다시 빌드한다.
'IT > Spring & Spring Boot' 카테고리의 다른 글
[IT/Spring] 스프링 개념들 복습 (Servlet, MVC, Model, DAO) (1) | 2024.07.21 |
---|---|
[IT/Spring Boot] 스프링부트의 HttpSession에 대해 (0) | 2024.07.19 |
[Spring Boot] JdbcTemplate 사용하기 (0) | 2023.11.18 |
[TDD] Junit으로 Spring Boot에서 TDD(Test-Driven Development)를 통해 로그인 기능 구현하기 (2) | 2023.06.06 |