728x90
InstallCert를 사용해 SSL/TLS Server 인증서 생성
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
unable to find valid certification path to requested target
위 exception은 연결하려는 remote 도메인의 인증서가 신뢰하는 인증기관 인증서 목록(keystore)에 존재하지 않기 때문에 발생한다.
보안 담당자로부터 인증서 파일을 받아 해결할 수 있지만 이게 가능했으면 검색을 안했겠지.
연결하려는 도메인 주소를 알면 인증서를 다운받을 수 있다.
1. InstallCert.java 다운로드
먼저 curl 명령어로 InstallCert.java 파일을 다운받는다.
curl -O https://gist.githubusercontent.com/lesstif/cd26f57b7cfd2cd55241b20e05b5cd93/raw/InstallCert.java
2. InstallCert.java 이동
다운받은 파일을 jdk위치/lib/security 경로로 옮겨준다. ${JAVA_HOME}/lib/security/가 정석인듯하다.
하지만 나는 intelliJ에서 사용하는 JDK와 JAVA_HOME 경로가 다르다. 따라서, 해당 경로로 파일을 옮겨준다.File>Project Structure>Platform Settings>SDKs 메뉴에서 사용중인 jdk의 JDK home path를 찾을 수 있다.{JDK home path}/lib/security/ 위치로 다운받은 InstallCert.java를 옮긴다.
mv InstallCert.java {JDK home path}/lib/security/
3. 인증서 생성하기
InstallCert.java 컴파일한다.
javac InstallCert.java
InstallCert를 실행한다. 연결하려는 도메인을 parameter로 줘야한다!
java -cp ./ InstallCert [IP/HOST]
ex) java -cp ./ InstallCert google.com
keystore에 추가여부를 물어보는 데, 1을 선택한다.
Added Certificate to keystore 'jssecacerts' using alias 'google.com-1'
와 같은 alias을 출력하면 인증서를 정상적으로 생성한 것이다.
만약 1번이 안되면 2번으로 다시 시도해서 되는 것으로 하면 된다.
728x90