IT/development

[java] PKIX path building failed 해결방법(HTTPS 통신 에러)

알 수 없는 사용자 2023. 2. 1. 21:15
반응형

목차

    java에서 외부 사이트에 HTTPS로 통신할 경우 "PKIX path building failed"가 발생할 수 있다.

    원인은 여러가지가 있을 수 있지만 내 경우는 해당 사이트의 인증서를 JVM의 인증서 목록에 추가해 줘서 해결 했다.

    아래 파일을 다운로드 받아서 아래 절차대로 진행하면 된다.(windows 기준)

    InstallCert.java
    0.01MB


    InstallCert.java 컴파일 😄

    다운로드 받은 java파일을 컴파일 한다.

    당연히 InstallCert.java파일이 있는 경로로 이동 후 입력해야 한다.

    javac InstallCert.java


    인증서 추출 😘

    컴파일 후 클래스가 생성되었으면 아래처럼 인증서를 추출할 사이트 도메인을 parameter로 넣고 실행한다.

    java InstallCert xxx.xxx.com

    아래처럼 표시되면 정상적으로 된것이고 여기서 2를 누른다.(보통 2번이 CA의 인증서라고 한다.)

    아래처럼 인증서가 추가되었다고 나오면 성공한거다.

    alias는 보안상 가렸는데 이 alias를 메모해 둔다, 여기까지 진행을 했으면 아래처럼 파일이 생긴다.


    output.cert 파일 생성 😍

    jssecacerts 이 파일이 keyStore이고 이 안에 있는 인증서를 JVM에서 인식할 수 있는 파일로 변환할거다.

    아래 명령어를 입력한다.

    JAVA_HOME 환경변수가 만일 C:\Program Files로 되어 있을 경우 찾지 못할 수도 있다.(띄어쓰기 때문에)

    그럴 경우엔 환경변수 경로를 변경하면 된다.(내 경우도 "C:\Program Files" 경로를 찾지 못해 그냥 환경변수 경로를 변경했다.)

    %JAVA_HOME%/bin/keytool -exportcert -keystore jssecacerts -storepass changeit -file output.cert -alias "위에서 메모한 alias"

    정상적인 경우 아래처럼 표시되고 output.cert파일이 생성된다.

    keytool을 이용해 jssecacerts에 있는 인증서를 output.cert파일로 저장하고 비밀번호는 changeit으로 한다는 의미이다.

    경로를 보면 아래처럼 output.cert파일이 생성되어 있다.

    이 파일을 JVM의 인증서 목록에 추가할거다.


    JVM의 인증서 목록에 output.cert 추가 🙄

    %JAVA_HOME%/bin/keytool -importcert -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit -file output.cert -alias "원하는 alias"

    인증서가 추가되었는지 아래 명령어로 확인해보자

    %JAVA_HOME%/bin/keytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit -alias "alias 입력"

    아래처럼 나오면 제대로 등록된거다.

    이제 다시 HTTPS 통신 테스트를 해보면 잘될거다. 😎


    인증서 삭제 방법 😂

    혹시 실수로 뭔가를 잘못해서 인증서를 다시 등록해야 되면 아래 명령어로 삭제 후 다시 추가하면 된다.

    %JAVA_HOME%/bin/keytool -delete -alias "alias명" -keystore %JAVA_HOME%/jre/lib/security/cacerts -file output.cert

    비밀번호는 "changeit" 입력

    삭제 후 다시 인증서 목록 조회 시 아래처럼 Exception이 발생한다.

    이렇게 고맙게도 새로운 지식을 또 얻었다.

    출처: https://hulint.tistory.com/19, https://www.lesstif.com/java/java-pkix-path-building-failed-98926844.html

    반응형