Столкнулся с другой проблемой с помощью SSL и Tomcat: я настроил keystore, который содержит ключ и сертификат (сертификат сервера, который я хочу представить клиентам, соединяющимся с сайтом). Я сделал то же для базы доверенных сертификатов (я испытываю необходимость в аутентификации клиента).
Проблема, которую я имею теперь, состоит в том, что, когда я соединяюсь со своим экземпляром Tomcat через HTTPS, сертификат, представленный мне (сертификат сервера), не является моим фактическим сертификатом сервера, а скорее ключом в JKS keystore. Используя-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
Я заменил действительные значения заполнителями. = доменное имя сервера (но в этом случае, по некоторым причинам это - ключ а не сертификат). X = VeriSign CA (это должно быть корректно). У меня есть существующий сертификат, который я хотел бы использовать для представления клиентам, которые я импортировал в JKS keystore использующий 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 keystore и представить его должным образом Tomcat.
ситуация, в которой произошла моя проблема, следующие:
решение я нашел для работы:
Преобразовывают существующий сертификат и его закрытый ключ в формат DER. Например (использующий OpenSSL):
Для закрытый ключ ;
openssl pkcs8-topk8-nocrypt - в my_private_key.key - сообщают PEM - my_private_key.der-outform DER
Для фактического подписанный сертификат ;
openssl x509 - в my_certificate.crt - сообщают PEM - Импорт my_certificate.der-outform DER
оба файлы DER в keystore (файл JKS) использование пользовательского класса Java.
java ImportKey my_private_key.der my_certificate.der
я не изображал это сам (весь кредит переходит к исходному изобретателю (изобретателям)).The источник для этого класса Java, и еще некоторые детали могут быть найдены здесь и здесь . Я изменил этот класс немного так, чтобы было 3-е (или 4-е) параметр, который указывает выходное местоположение получающегося файла JKS.
конечным результатом является JKS keystore, который может затем использоваться в конфигурации Коннектора Tomcat в качестве keystore. Вышеупомянутый инструмент генерирует файл JKS с паролями по умолчанию для ключа и сам файл JKS, они могут быть изменены более позднее использование keytool-storepasswd
и keytool-keypasswd
. Надежда это помогает для людей, сталкивающихся с той же проблемой.
Ваша конфигурация должна работать правильно.
Как - к объясняет шаги, чтобы предпринять, чтобы иметь правильные JKS.
Убедитесь, что вы импортировали сертификат на JKS, с соответствующими псевдонимами (TestKey)