Импортировать сертификат как 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>

Как я могу сделать alias tomcat import как PrivateKeyEntry?

Ответ 1

Избавьтесь от опции -trustcacerts. Это не сертификат ЦС. Это ваш сертификат. И используйте тот же псевдоним, который уже имел закрытый ключ.

Ответ 2

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

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

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 в ваше хранилище ключей бессмысленно. (Это было бы полезно в хранилище доверенных сертификатов, но используемый ЦС, вероятно, уже находится в хранилище доверенных сертификатов по умолчанию.)

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

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

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

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

Ответ 3

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

Обычно, когда вы создаете keystore (.jks), он включает закрытый ключ внутри. Если его пустой (удаленный), вы должны сгенерировать пакет (файл .p12) из ​​вашего ключа и сертификатов.

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

Затем у вас есть ключ и сертификат, из которых вы должны сгенерировать (.p12) пакетный файл: (на машине 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