SRC: 정광섭님, https://www.lesstif.com/pages/viewpage.action?pageId=12451848
증 상
Java 에서 HTTPS 로 remote 사이트에 연결시 다음과 같은 Exception 이 발생
원 인
다음과 같이 여러 가지 원인이 있을 수 있다.
연결하려는 remote site의 인증서가 신뢰하는 인증기관 인증서 목록(keystore)에 없음
서버/클라이언트간 사용하려는 SSL/TLS 버전이 맞지 않음(Ex:TLS 1.0 만 지원하는 서버에 1.2로 hand shaking 요청등)
SSL/TLS 통신에 사용하려는 cipher suite 가 오래되거나 지원하지 않음. (Ex: JDK 1.8 부터는 RC4 를 사용하려고 하면 에러 발생)
웹 브라우저의 경우 인증서 경로 설정을 참고하여 웹 서버에 Intermediate CA certificate 를 설치한다.
무료 SSL 인증서를 발급해 주는 Let's encrypt 의 CA 인증서는 Java VM 에 포함되어 있지 않으므로 Let's encrypt 에서 발급 받은 SSL 인증서를 Java 에서 사용할 경우에도 위와 같은 에러가 발생한다.
해 결
1번 원인일 경우 현재 구동되는 JDK 의 keystore에 상대방 인증서를 넣어줘야 함
1. gist 에서 InstallCert.Java 를 다운로드
3. InstallCert 구동
4. 다음과 같은 화면이 나오면 1을 눌러서 인증서 저장
서버가 2 개의 인증서를 전송했는데 2번째가 Let's Encrypt 의 CA 인증서이므로 2번을 선택해서 저장해야 한다.
5. 다음과 같은 메시지가 나오고 저장됨. keystore 명과 alias 명을 기억
6. keytool 로 keystore에서 인증서 추출 (KeyStore의 암호는 changeit 이라 가정!)
-alias 옵션 뒤에 파라미터는 5번에서 저장된 alias(letsencrypt) 를 입력
7. 현재 JDK 의 keystore에 cert import
이미 존재할 경우 다음 명령어로 삭제
keytool -delete -alias letsencrypt -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit
같이 보기
'DevOps' 카테고리의 다른 글
CentOS 8 설정 on VirtualBox (0) | 2020.03.20 |
---|---|
ssh 서버 접속을 위한 키생성 및 설정 과정 (0) | 2019.06.10 |
JMeter와 Performance 테스트 (0) | 2018.08.13 |
Tomcat 서버를 자동으로 Startup 하기 On Amazon Linux (0) | 2018.06.18 |
AMI vs. EC2 vs. Volume vs. Snapshot (0) | 2017.12.18 |