2015-06-17 2 views
4

Я новичок в настройке Jetty Server для SSL. Я выполнил шаги с digcert Я создал файл закрытого ключа, Запрос сертификата CSR-файл.Создайте хранилище java из секретного ключа и пакета сертификатов CA

Я отправил запрос на сертификат в CA и получил мой подписанный CSR. Но CA отправил мне пакет с двумя сертификатами, один из которых - мой сертификат, подписанный CA, а второй - CA Certificate. (1. Star_xyx_abc_com crt файл, файл 2.DigiCertCA crt). Теперь я столкнулся с проблемой создания хранилища ключей из этих файлов.

Когда я Keytool создать хранилище ключей следуя Oracle docs шаги 4,5 и 6, я получил ошибку

keytool error: java.lang.Exception: Certificate not imported, alias already exists. 

, когда я использовал OpenSSL создать PKCS12 Я получил

Loading 'screen' into random state - done 
Error unable to get issuer certificate getting chain. 

погрешность.

Как я могу сгенерировать KeyStore из файла закрытого ключа, мой сертификат подписан сертификатом CA и CA?

ответ

0

Вот шаги, которые я выполнил для установки сертификата.

1.Created PKCS12 с тремя файлами (файл закрытого ключа, мой Cert, CA сертификат) с использованием OpenSSL инструмента.

openssl pkcs12 -export -out j2vproject.pkcs12 -inkey my_privatekeyfile.key -in star_xyz_abc.crt -certfile DigiCertCA.crt 

2.Created ява хранилища ключей из PKCS12 с помощью Keytool инструмента.

keytool -v -importkeystore -srckeystore j2vproject.pkcs12 -srcstoretype PKCS12 -destkeystore j2vprojectkeystore.jks -deststoretype JKS 

3. добавил это хранилище ключей к серверу, и оно сработало.

4

Asides: у вас есть сертификата подписанного CA, но сертификат является не подписанного CSR. Some данные в сертификате такие же, как некоторые данные в CSR, но не все. Кроме того, я удивляюсь, почему вы выполнили инструкции digicert для Apache/OpenSSL, а не для Tomcat/Java, что было бы намного проще, потому что Jetty также является Java.

В любом случае: инструкции на этой странице Oracle работают только в том случае, если вы создали секретный ключ и CSR с Java keytool, как описано в шагах 1,2,3. Кроме того, этапы 4 и 5 + 6 представляют собой альтернативы; хотя текст не так ясен, как может быть, вы делаете то или другое, не то, и другое - и только после выполнения 1,2,3.

Учитывая, что вы сейчас находитесь, ваш единственный вариант - преобразовать файлы OpenSSL в pkcs12 и, возможно, затем использовать keytool для преобразования pkcs12 в JKS. (Java crypto сам может использовать pkcs12 напрямую, но не все Java-крипто-приложения могут ссылаться на эту опцию, и я не знаю, может ли Jetty.)

Вы говорите, что попробовали это и не указали никаких подробностей о том, что вы сделали, но я догадываюсь, что, скорее всего, у вашего файла «Digicert CA» есть промежуточный CA не корень, и для получения полной цепочки вам нужно добавить root. (Полная цепочка на самом деле не требуется для формата pkcs12 и, следовательно, подкоманды openssl pkcs12, но очень желательно для SSL/TLS, таких как Jetty, и поэтому вы должны это сделать.)

Сначала проверьте, что ваши (немедленные) CA и что DigicertCA.crt это с

openssl x509 -in $yourcert.crt -noout -issuer 
openssl x509 -in DigicertCA.crt -noout -subject -issuer 

Если эмитент вашей серт соответствует предмету DigicertCA, и они (оба) включают в себя что-то вроде «промежуточного ЦСА "или„SSL CA“, и эмитент DigicertCA имеет„CN“, который является любой из DigiCert Assured ID Root CA, DigiCert Global Root CA или DigiCert High Assurance EV Root CAто вам повезло, если вы (или кто-либо еще) не удалил Digicert root (s) по умолчанию cacerts в вашей Java (JRE). Используйте keytool -exportcert для копирования этого корня digicert из соответствующей записи в JRE/lib/security/cacerts в файл. Объедините свой секретный ключ, ваш сертификат, промежуточный сертификат «DigicertCA» и соответствующий корневой сертификат в один файл, и отправьте его на openssl pkcs12 -export [-name whatever] и направьте вывод в файл, указав непустой пароль.

(Другие случаи:. Если DigicertCA.crt на самом деле является корнем и соответствует эмитенту вашей CERT, это было бы очень странно, если это корень и не совпадает с эмитентом вашей CERT, вам не хватает промежуточный сертификат CA (или, возможно, даже более одного), вы сможете получить его (от Digicert), если он (DigicertCA.crt) соответствует эмитенту вашего сертификата и не является корневым, но его эмитент не является один из корней, названных выше, вам нужно больше для вашей сертификаты цепи, но без дополнительной информации я не могу советовать, которые.)

с файлом PKCS12, сделайте

keytool -importkeystore -srckeystore p12file -srcstoretype pkcs12 -destkeystore newjksfile 
+0

Thanks dave_thompsom_085 Я следил за вашим предложением и получил мой сертификат. –

0

Я попытался добавить как цепочку сертификатов CA, так и cacerts из дистрибутива SSL и использовать результат в качестве ca cert chain, и это сработало!

cat yourCACert.crt /etc/ssl/certs/ca-certificates.crt > fullCAChain.crt 

openssl pkcs12 -export -chain -CAfile fullCAChain.crt -in customercert.cer -inkey customercert.key -out customercert.keystore -name tomcat