개발일기

unable to find valid certification path to requested target 인증서 오류 본문

서버 & 클라우드

unable to find valid certification path to requested target 인증서 오류

한둥둥 2025. 4. 17. 17:07

 

어제 배포 중, 우리 회사 서비스는 Spring Cloud Gateway를 사용해서 외부 API를 호출하는 방식이 아닌, RestTemplate 통해서, 호출해주는 방식을 사용하고 있다. 

그러다 보니, 인증서를 통해서 HTTPS 서버의 SSL 인증서를 검증하지 못하여 아래와 같은 에러가 발생하였습니다. 

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

 

오류에 대한 조치는 Dockerfile에 인증서를 추가해주는 방식으로 진행하였습니다. 

RUN apt-get update && apt-get install -y \
openssl \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

RUN mkdir -p /usr/local/tomcat/cert

# 인증서 체인 전체 가져오기
RUN echo | openssl s_client -showcerts -connect url:443 -servername url \
    | awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/ { print $0; if (/END CERTIFICATE/) print "" }' \
    > /usr/local/tomcat/cert/chain이름.crt
    
    
# 체인을 JDK에 등록
RUN keytool -import -trustcacerts -keystore $JAVA_HOME/lib/security/cacerts \
    -storepass changeit -noprompt -alias 인증서이름 \
    -file /usr/local/tomcat/cert/체인이름.crt

 

해당 도커 파일로 바꿔어 정상동작을 확인했습니다. 

 

 

왜 이런 일이 발생했을까? << 조치 후, 원인을 파악하고자 찾아보았습니다. 

 

1. 인증서가 신뢰되지 않음

서버의 SSL 인증서가 로컬 JVM의 truststore (신뢰 저장소)에 등록되어 있지 않음

 

2. 자체 서명(Self-signed) 인증서

서버가 발급기관(CA)이 아닌 자체 서명한 인증서를 사용 중

 

3. 중간 인증서 체인이 깨짐

서버가 중간 인증서를 제대로 제공하지 않아서, 클라이언트가 최상위 인증기관까지 신뢰 체인을 못 따라감

 

4. 로컬 JVM 환경 문제

너무 오래된 JDK, truststore 갱신 안 됨, 루트 인증기관(root CA) 리스트가 최신이 아님

 

나의 경우 첫번째 문제였으며 Dockerfile을 통해서 작성해서 이를 해결해주었다. 

'서버 & 클라우드' 카테고리의 다른 글

서버리스(ServerLess) 개념  (2) 2025.02.24