상세 컨텐츠

본문 제목

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException

소프트웨어/java

by 야솔아빠 2016. 1. 22. 16:13

본문

반응형

원래 포스팅 :  http://kgj1.blog.me/220584997842

JAVA 애플리케이션에서 JSSE (Java Secure Socket Extension)를 통해 사설 인증서를 사용하는 서버와 SSL 통신을 해야 할 경우가 있다.

그런데 JAVA에서는 (KeyStore에 등록되어 있는) 신뢰할 수 있는 공인 인증서가 아니기 때문에 아래와 같은 오류를 뱉어낸다.

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

이를 해결하는 가장 간단한 방법은..
SSL 통신에 사용하는 사설 인증서를 JSSE KeyStore에 등록하는 것이다.

아래 파일을 다운로드하고 컴파일 한 뒤 실행하면 jssecacerts (JSSE keystore 파일)에 원하는 인증서를 자동으로 등록해준다.

InstallCert.java

jssecacerts 파일은 jre 의 security 디렉토리에 존재해야 하는데, 번거로움을 피하기 위해 아예 해당 디렉토리로 이동하여 작업을 하는 게 좋다. (jssecacerts 원본 파일은 백업을 해두는 게 좋겠다.)

1. jre security 경로로 이동 (아래는 내 서버 기준의 경로이며 환경에 따라 다를 수 있음)
$ cd /usr/lib/jvm/jre-1.7.0/lib/security
2. 위 소스를 다운받고 컴파일
$ javac InstallCert.java
3. InstallCert 를 실행하여 인증서를 다운로드하고 jssecacerts 에 append
$ java InstallCert [인증서를 다운로드할 도메인 or IP 주소]:[포트]
4. 반영을 위해 애플리케이션 재시작

이제 애플리케이션에서 SSL 통신이 잘 되는지 확인한다.

<참고>
1. keystore에 등록된 인증서를 확인하는 방법 (default 패스워드는 changeit)
$ keytool -list -keystore jssecacerts

2. keystore에 등록된 인증서를 제거하는 방법
$ keytool -delete -keystore jssecacerts -alias [등록된 인증서의 이름(위 list 명령으로 확인 가능)]


반응형

관련글 더보기

댓글 영역