Сертификат хранилища ключей Tomcat HTTPS - PullRequest
19 голосов
/ 13 января 2010

Столкнулся с другой проблемой с использованием SSL и Tomcat: я настроил хранилище ключей, которое содержит ключ и сертификат (сертификат сервера, который я хочу представить клиентам, подключающимся к сайту). Я сделал то же самое для склада доверенных сертификатов (мне понадобится аутентификация клиента).

Проблема, с которой я столкнулся сейчас, заключается в том, что когда я подключаюсь к своему экземпляру Tomcat через HTTPS, сертификат, представленный мне (сертификат сервера), является не моим действительным сертификатом сервера, а скорее ключом в JKS. Хранилище ключей. Использование -Djavax.net.debug = ssl показывает, что он представляет правильный CA для аутентификации клиента, но не правильный сертификат сервера.

adding as trusted cert:
  Subject: CN=A
  Issuer:  CN=A
  Algorithm: RSA; Serial number: -
  Valid from Tue Nov 10 14:48:31 CET 2009 until Mon Feb 08 14:48:31 CET 2010

adding as trusted cert:
  Subject: X
  Issuer:  X
  Algorithm: RSA; Serial number: -
  Valid from Wed Jan 19 01:00:00 CET 2005 until Mon Jan 19 00:59:59 CET 2015

Я заменил реальные значения местозаполнителями. A = доменное имя сервера (но в этом случае по какой-то причине это ключ, а не сертификат). X = VeriSign CA (это должно быть правильно). У меня есть существующий сертификат, который я хотел бы использовать для представления клиентам, который я импортировал в хранилище ключей JKS с помощью keytool.

Конфигурация соединителя Tomcat:

Connector port="444" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"       
keystoreFile="conf/ssl/keystore.jks"
keystorePass="xx"
keyAlias="testkey"
truststoreFile="conf/ssl/truststore.jks"
truststorePass="xx"

Есть идеи, почему мой экземпляр Tomcat не предоставляет правильный сертификат?

Ответы [ 3 ]

15 голосов
/ 13 января 2010

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

Ситуация, в которой возникла моя проблема, выглядит следующим образом:

  1. У меня есть файл сертификата, который я сгенерировал сам, используя OpenSSL с нуля (ключ + CSR -> сертификат), подписанный моим собственным CA.
  2. Я хочу настроить Tomcat так, чтобы он представлял этот конкретный сертификат пользователям, подключающимся к моему сайту.

Решение, которое я нашел для работы:

  1. Преобразовать существующий сертификат и его закрытый ключ в формат DER. Например (с использованием OpenSSL):

    Для закрытого ключа ;

    openssl pkcs8 -topk8 -nocrypt -in my_private_key.key -inform PEM -out my_private_key.der -outform DER

    Для действительного подписанного сертификата ;

    openssl x509 -in my_certificate.crt -inform PEM -out my_certificate.der -outform DER

  2. Импорт обоих файлов DER в хранилище ключей (файл JKS) с использованием пользовательского класса Java.

    java ImportKey my_private_key.der my_certificate.der

    Я сам не понял этого (все заслуги исходному изобретателю (ям)). Источник этого Java-класса и некоторые другие подробности можно найти здесь и здесь . Я немного изменил этот класс, чтобы был 3-й (или 4-й) параметр, определяющий расположение выходного файла JKS.

Конечным результатом является хранилище ключей JKS, которое затем можно использовать в конфигурации Tomcat Connector в качестве хранилища ключей. Вышеупомянутый инструмент сгенерирует файл JKS с паролями по умолчанию для ключа и сам файл JKS, их можно изменить позже, используя keytool -storepasswd и keytool -keypasswd. Надеюсь, это поможет людям, сталкивающимся с той же проблемой.

3 голосов
/ 13 января 2010

Ваша конфигурация должна работать правильно.

Руководство Tomcat объясняет шаги, которые необходимо предпринять для получения правильного JKS.

Убедитесь, что вы импортировали сертификат в jks с соответствующим псевдонимом (testKey)

2 голосов
/ 31 мая 2014

Расширение комментария @ Божо

Это было действительно важно. «Ключ и купленный сертификат должны находиться под одним и тем же псевдонимом» .

Сертификат SSL, приобретенный в CA (Verisign, Digicert и т. Д.), Должен быть импортирован с тем же псевдонимом, что и закрытый ключ, сгенерированный до создания csr.После импорта приобретенного сертификата в хранилище ключей с помощью java keytool вы увидите «Ответ сертификата добавлен в хранилище ключей».

Чтобы проверить цепочку доверия, используйте команду терминала openssl s_client-connect yourdomain.com:443 -showcerts. Он начинается с вашего сертификата и ведет к доверенному корневому CA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...