2017-02-03 13 views
0

У моей компании есть собственный сертификат ROOT. Используя этот сертификат, они подписали сертификат intermediate.Правильный способ импорта корневых и промежуточных сертификатов в Java cacerts

Затем мы выпустили CSR для сертификата server и подписали его с сертификатом intermediate.

Что такое правильный способ импортировать ROOT сертификат и intermediate в Java cacerts файл, для того, чтобы иметь возможность установить SSL соединение с сервером, который имеет server сертификат, подписанный 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 вашего клиента будет проверять цепочку сертификации до корневого не найден

Примечание: Рекомендуется использовать собственный вместо доверенных сертификатов модифицирующих cacerts

+0

спасибо. Теперь я не понимаю, почему Java 1.6 может создавать цепочку сертификатов, но Java 1.7/1.8 не может. Кроме того, Java 1.6 может устанавливать SSL-соединение только в том случае, если промежуточный сертификат импортируется в файл cacerts. – dplesa

+0

Я задал этот вопрос относительно различных версий Java и сбоев связи SSL здесь: http://stackoverflow.com/questions/42008228/sun-security-validator-validatorexception-pkix-path-building-failed-with-java – dplesa

+0

_unable to найти допустимый путь сертификации к запрошенному целевому_ означает, что TrustManager SSL-соединения не нашел доверенный сертификат в настроенном доверенном сервере для сертификата, отправленного сервером. Я думаю, что не было никаких фундаментальных изменений в проверке доверия между 1.6 и 1.7. Рекомендуемый способ установки доверительного хранилища - это то, что я ответил – pedrofb