일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- JavaScript
- memcached
- SpringBoot
- docker 설치
- 리눅스
- generate pojos
- 도커
- NextJS
- MySQL
- React
- spring boot
- java8
- generate entity
- CentOS6
- JPA
- Java
- Next.js 14
- header setting
- ollama langflow
- spring
- jpa entity자동
- custom valid
- dto valid
- 초기 구축
- java9
- 헤더 설정
- docker
- 초기 세팅
- jvm
- swagger
- Today
- Total
개발자의 길
Java 의 keystore에 SSL Server 인증서를 import 하는 방법 본문
증상
java 에서 HTTPS 로 remote 사이트에 연결시 다음과 같은 Exception 이 발생
Caused by: javax.naming.CommunicationException: simple bind failed: <server-name> [Root exception is 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로 연결하려는 remote site의 인증서가 신뢰하는 인증기관 인증서 목록(keystore)에 없음
해결
현재 구동되는 JDK 의 keystore에 상대방 인증서를 넣어줘야 함
-
google code에서 InstallCert.Java 를 다운로드
wget https:
//java-use-examples.googlecode.com/svn/trunk/src/com/aw/ad/util/InstallCert.java
-
vi InstallCert.java 를 한후에 최상단의 package com.aw.ad.util; 를 삭제한다
-
컴파일
javac InstallCert.java
-
InstallCert 구동
# localhost 에 SSL 인증서를 받아올 호스트명을 입력
java -
cp
./ InstallCert 호스트명.com
-
다음과 같은 화면이 나오면 1을 눌러서 인증서 저장
Caused by: java.lang.UnsupportedOperationException
at InstallCert$SavingTrustManager.getAcceptedIssuers(InstallCert.java:183)
at sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraints(SSLContextImpl.java:926)
at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:872)
at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:814)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
... 2 moreServer sent 1 certificate(s):
1 Subject CN="lesstif.com,www.lesstif.com", O=lesstif, C=KR
Issuer CN="lesstif.com,www.lesstif.com", O=lesstif, C=KR
sha1 03 7b 8f 5c 9b de c2 75 0b 90 b5 b6 9d 18 72 5d 60 ca 58 b7
md5 0c 9e 9e 2c 0c 72 a8 65 fa 95 f8 d0 72 20 99 bfEnter certificate to add to trusted keystore or 'q' to quit: [1]
- 다음과 같은 메시지가 나오고 저장됨. keystore 명과 alias 명을 기억
-
keytool 로 keystore에서 인증서 추출 (KeyStore의 암호는 changeit(디폴트 암호) 이라 가정!)
## alias 옵션뒤에 위의 alias명 입력
keytool -exportcert -keystore jssecacerts -storepass changeit -
file
-
현재 JDK 의 keystore에 cert import
## JAVA_HOME=/usr/java/jdk1.7.0_25
keytool -importcert -keystore ${JAVA_HOME}
/jre/lib/security/cacerts
-storepass changeit -
file
output.cert -
alias
호스트명.com
-
이미 존재할 경우 다음 명령어로 삭제
keytool -delete -alias 호스트명.com -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit
- 해당 사이트에 다시 연결하여 문제가 해결되었는지 확인
Added certificate to keystore 'jssecacerts' using alias '호스트명.com' |
'4. JAVA' 카테고리의 다른 글
[java] XML parse (파싱) (0) | 2015.06.09 |
---|---|
[java] MD5 암호화 (0) | 2015.03.25 |
[java] 오라클에서 clob으로 받아온 데이터 String으로 처리 하기 (0) | 2014.06.17 |
[java]스프링 쿼츠 (Spring Quartz) 스케쥴러에 배치(Batch) 파일 등록하기 [출처] 스프링 쿼츠 (Spring Quartz) 스케쥴러에 배치(Batch) 파일 등록하기|작성자 비전공 개발자 (0) | 2014.02.14 |
[java]Java.math.BigDecimal의 사용(double,float 더하기 버그해결) (0) | 2014.02.13 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.