Network

PKIX Path Building Failed

Superkill 2018. 7. 19. 01:03
반응형

tomcat에 인증서 경로를 넣어주면 문제없겠다고 생각했었는데
jvm에 인증서를 등록해야 한다더라. 
jvm에 인증서를 등록한다는 개념조차 없었는데 하하
jvm 또는 java에 인증서를 등록한다 라고 표현하는 것 같다.

일단 에러를 해결하기 위한 마법의 명령어를 제시하자면 다음과 같다.

keytool -import -trustcacerts -alias letsencrypt -file [공개키경로(pem형식)] -keypass  [비밀번호] -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit


나의 경우 jre/lib/security/cacerts 경로를 주면서 등록했는데
용어 정리도 할 겸 여기서 의문점 몇가지


1. cacerts 파일은 뭐지?

The cacerts file is a collection of trusted certificate authority (CA) certificates.

 - whatiscacertfile

일단 여러개의 신뢰가능한 인증기관(CA)들의 컬렉션이라는데
이 파일에는 패스워드가 걸려있다 이 패스워드를 storepass라고 부르는데
디폴트로 'changeit'이 설정되어있다. 여기 등록된 내용을 보거나 새로운 인증서를 임포트 할 때 이 storepass가 필요하다고 한다.

2. KeyStore와 TrustStore

java는 KeyStore라는 인터페이스를 통해서 암호화 키와 인증서를 관리한다고 하는데 결국 cacerts가 keystore를 의미하는 것 같다.

keystroe는 서버가 자신의 인증서를 저장하기 위해 사용하고
truststore는 다른 쪽의 인증서를 저장하기 위해 사용한다.

참고 : http://www.java67.com/2012/12/difference-between-truststore-vs.html


3. storepass와 keypass

storepass는 keystore에 접근하기 위한 암호
keypass는 특정 키 쌍(공개키, 개인키) 의 개인키에 접근하기 위한 암호


4. jre에만 등록가능한건가? jdk에 등록할 수도 있지 않나? 

단순하다. 현재 사용하는 프로덕트가 사용하는 곳에 등록하면 된다.
즉 JAVA_HOME의 환경변수가 가리키는 곳이 jre면 jre쪽 cacerts에
jdk면 jdk쪽 cacerts에 인증서를 넣으면 되는 거였다.