Импорт сертификата как PrivateKeyEntry

Я устанавливаю SSL на сервере Tomcat и следую этим инструкциям от издателя https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&actp=CROSSLINK&id=SO16181 и в нем говорится:

Verify the following information:

The SSL certificate is imported into the alias with the "Entry Type" of 
PrivateKeyEntry or KeyEntry.  If not, please import the certificate into 
the Private Key alias.

когда я импортирую сертификат (tomcat), я использую:

keytool -import -trustcacerts -alias your_alias_name -keystore your_keystore_filename
-file your_certificate_filename

но когда я это делаю, он импортирует как trustCertEntry

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 3 entries

primaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1): <snip>
tomcat, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>
secondaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>

как я могу сделать импорт псевдонима tomcat как PrivateKeyEntry?

3 ответов


избавиться . Это не сертификат CA. Это код сертификаты. И использовать тот же псевдоним, что и у закрытого ключа.


эти рекомендации CA немного вводят в заблуждение. @EJP справедливо сказал, что вы не должны использовать -trustcacerts для вашего сертификата.

кроме того, этот документ ЦС предлагает импортировать первичные и промежуточные сертификаты ЦС в отдельных операциях, которые должны дать вам такой результат:

primaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1): <snip>
secondaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>
tomcat, Jul 26, 2014, PrivateKeyEntry,
Certificate fingerprint (SHA1):  <snip>

к сожалению, импорт сертификатов CA в вашем хранилище как это бессмысленно. (Было бы полезно в truststore, но CA, который вы используете, вероятно, уже находится в truststore по умолчанию.)

полезно иметь сертификаты CA для вашего сертификата в хранилище действительно, чтобы представить полную цепочку сертификатов, когда требуются промежуточные сертификаты. Однако keymanager (если только это не пользовательская реализация) не построит цепочку для вас, даже если он найдет подходящие сертификаты CA рядом с вашим сертификатом конечного объекта (в PrivateKeyEntry).

вам нужно импортировать эти сертификаты вместе, как цепочка, против входа, где находится ваш закрытый ключ. Для этого объедините сертификаты в текстовый файл (PEM-кодированный), сначала сертификат сервера, затем сертификат, используемый для его выдачи, и так далее. Затем импортируйте этот файл в хранилище ключей, используя псевдоним закрытого ключа. (Это точно такая же проблема, как в этот вопрос, но с сервером сертификат.)

(Я не уверен, что ваш CA дает вам файл сертификата как цепочку уже, но, как правило, вы получаете по крайней мере свой сертификат только в одном файле, а промежуточные сертификаты CA в другом. Документ, на который вы ссылаетесь, кажется вводящим в заблуждение, потому что они не упоминают более одного блока между --BEGIN/END CERT--, но каким-то образом их пример скриншота имеет длину сертификата 4 против этого одного псевдонима.)

как отметил @jww в комментарии к вашему вопросу, вам не нужно сертификат" root " CA (самозаверяющий) в этой цепочке, так как либо ваш клиент доверяет ему уже, либо у него нет причин доверять ему при отправке. Это не неправильно иметь его в вашей цепочке, но это бессмысленно и может добавить немного сетевых накладных расходов.


вы пытаетесь добавить сертификат и ожидаете, что это будет закрытый ключ - его путаница между двумя разными вещами.

Как правило, при создании хранилища ключей (.jks) он включает закрытый ключ внутри. Если его пустое (удалено), вы должны создать bundle (.файл p12) из вашего ключа и сертификатов.

для создания нового свободного ключа и сертификата вы можете использовать эту реализацию openSSl https://zerossl.com.

тогда у вас есть ключ и сертификат, которые вы должны создать (.P12) bundle file из них: (на linux машине)

openssl pkcs12 -export -in [filename-certificate] -inkey [filename-key] -name [host] -out [filename-new-PKCS-12.p12]

теперь просто добавьте файл пакета (.файл p12) в хранилище ключей (.jks), выполнив следующую команду:

keytool -importkeystore -deststorepass [password] -destkeystore [filename-new-keystore.jks] -srckeystore [filename-new-PKCS-12.p12] -srcstoretype PKCS12