티스토리 뷰

728x90

avax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed

 

자바에서는 신뢰할 수 없는 인증서를 가진 서버(요청하는 site의 ssl 인증서가 사설인증서)로의 요청을 제한하는데, 이를 해결하기 위해서는 두가지 방법이 있다.

 

1. http 요청 시 인증서를 무시하도록 코드 작성

- 솔직히 이것 때문에 코드 변경하기 싫어요🥲

2. 해당 사이트의 인증서를 JVM의 신뢰할 수 있는 인증서 저장소(Truststore)에 추가

 

나는 고객사로부터 인증서를 받아 JVM에 설치하는 방법을 선택했다. JVM이 설치되어 있는 서버에서 아래의 명령어를 실행한 후 재시작을 하면 된다.

keytool -trustcacerts \
-keystore $JAVA_HOME/jre/lib/security/cacerts \ 
-storepass changeit -noprompt -importcert \
-file /usr/local/certs/server.pem \
-alias myssl

 

1. -import : 인증서를 가져와서 저장소에 추가

2. -alias myssl : 인증서의 별칭 지정. myssl을 원하는 별칭으로 변경

3. file /usr/local/certs/server.pem 등록할 인증서 파일을 지정

4. -keystore $JAVA_HOME/jre/lib/security/cacerts

 

 

나의 경우에는 도커로 rockylinux 컨테이너를 생성해서 자바를 설치하여 서비스를 실행시키기 때문에, 인증서를 등록 후 재시작을 할 수 가 없었다. 따라서, 이미지를 생성 시에 인증서를 등록해주었다. 

FROM rockylinux:8.9
RUN dnf update -y && dnf install -y java-11-openjdk-devel glibc-langpack-ko bind-utils
ENV JAVA_HOME=/usr/lib/jvm/java
ENV PATH=$JAVA_HOME/bin:$PATH
ENV LANG=ko_KR.UTF-8
ENV LC_ALL=ko_KR.UTF-8
#ssl 인증서 복사
COPY ssl.pem /usr/local/certs/server.pem 
#인증서 등록
RUN keytool -trustcacerts -keystore ${JAVA_HOME}/lib/security/cacerts -storepass changeit -noprompt -importcert -file /usr/local/certs/server.pem -alias myssl
COPY build/libs/test.jar /app/test.jar
EXPOSE 8011
CMD ["java", "-jar", "/app/test.jar"]

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함