Вопрос

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

Проблема, которую я имею сейчас, заключается в том, что когда я подключаюсь к своему экземпляру 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 = a 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 не представляет правильный сертификат?

Это было полезно?

Решение

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

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

  1. У меня есть файл сертификата, который я сгенерировал, используя OpenSSL с нуля (Key + 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 в качестве хранилища ключей. Приведенный выше инструмент будет генерировать файл JKS с паролями по умолчанию для самого файла Key и JKS, их можно изменить позже, используя keytool -storepasswd а также keytool -keypasswd. Анкет Надеюсь, это поможет людям, сталкивающимся с той же проблемой.

Другие советы

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

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

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

Расширение на @bozho Comment,

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top