2017-02-03 1 views
0

우리 회사는 자체 ROOT 인증서를 가지고 있습니다. 이 인증서를 사용하여 그들은 intermediate 인증서에 서명했습니다.Java cacerts에서 루트 및 중간 인증서를 가져 오는 올바른 방법

그런 다음 server 인증서에 대해 CSR을 발행하고 intermediate 인증서로 서명했습니다.

intermediate에 의해 서명 server 인증서가 서버와의 SSL 연결을 설정할 수 있도록하기 위해, 자바의 cacerts 파일에 ROOT 인증서와 intermediate을 가져올 수있는 올바른 방법은 무엇입니까?

나는 서버에서 인증서 체인을 테스트하기 위해 OpenSSL을 사용 :

openssl s_client -showcerts -connect host:443 

CONNECTED(00000003) 
depth=0 C = COUNTRYCODE, ST = myCountry, O = myOrganization, CN = myServer, emailAddress = myMail 
verify error:num=20:unable to get local issuer certificate 
verify return:1 
depth=0 C = COUNTRYCODE, ST = myCountry, O = myOrganization, CN = myServer, emailAddress = myMail 
verify error:num=27:certificate not trusted 
verify return:1 
depth=0 C = COUNTRYCODE, ST = myCountry, O = myOrganization, CN = myServer, emailAddress = myMail 
verify error:num=21:unable to verify the first certificate 
verify return:1 
--- 
Certificate chain 
0 s:/C=COUNTRYCODE/ST=myCountry/O=myOrganization/CN=myServer/emailAddress=myMail 
    i:/CN=INTERMEDIATECERT 
-----BEGIN CERTIFICATE----- 
MIIFr... 
-----END CERTIFICATE----- 
--- 
Server certificate 
subject=/C=COUNTRYCODE/ST=myCountry/O=myOrganization/CN=myServer/emailAddress=myMail 
issuer=/CN=INTERMEDIATECERT 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 1601 bytes and written 589 bytes 
--- 
New, TLSv1/SSLv3, Cipher is AES256-SHA 

답변

1

당신은 단지 신뢰의 루트 인증서를 가져와야합니다.

keytool -import -trustcacerts -keystore path/to/cacerts -storepass changeit -alias aliasName -file path/to/certificate.cer 

핸드 셰이크 중 SSL 서버는 인증서와 중간 물을 제공해야합니다. 루트가

주를 찾을 때까지 클라이언트의의 TrustManager는 인증 체인의 유효성을 검사합니다 :

+0

감사합니다 수정 cacerts에 대신 자신의 신뢰를 사용하는 것이 좋습니다. Java 1.6이 인증서 체인을 구축 할 수있는 이유는 무엇인지 이해할 수 없지만 Java 1.7/1.8은 그렇지 않습니다. 또한 Java 1.6은 중간 인증서를 cacerts 파일로 가져 오는 경우에만 SSL 연결을 설정할 수 있습니다. – dplesa

+0

다른 자바 버전과 SSL 핸드 셰이크 실패와 관련하여이 질문을 던졌습니다 : http://stackoverflow.com/questions/42008228/sun-security-validator-validatorexception-pkix-path-building-failed-with-java – dplesa

+0

_unable to 요청한 대상에 대한 유효한 인증서 경로를 찾으십시오. 즉, SSL 연결의 TrustManager가 서버가 보낸 인증서에 대해 구성된 트러스트 스토어의 신뢰할 수있는 인증서를 찾지 못했음을 의미합니다. 1.6과 1.7 사이의 신뢰 검증에 대한 근본적인 변화가 없었던 것 같습니다. truststore를 설정하는 권장 방법은 내가 대답 한 대답은 – pedrofb

관련 문제