Самоподписанный сертификат не работает на сервере GlassFish 4.0

Я создал самоподписанный сертификат и добавил его в keystore.jks, но после настройки в http-listener-2 через консоль администратора он не работает. Кстати, сертификат «s1as» по умолчанию работает правильно.

Информация о сервере:

Install directory: C:\Program Files\glassfish-4.0\glassfish
Installed version: GlassFish Server Open Source Edition 4.0 (build 89)

Что я сделал:

Откройте cmd от имени администратора

Добавить keytool в PATH

set PATH=%PATH%;c:\Program Files\Java\jdk1.8.0_20\bin"

Сгенерировать ключ

C:\Program Files\glassfish-4.0\glassfish\domains\domain1\config>keytool -keysize
 2048 -genkey -alias autofirmado -keyalg RSA -keystore keystore.jks -validity 360
Introduzca la contraseña del almacén de claves:
¿Cuáles son su nombre y su apellido?
  [Unknown]:  Myname
¿Cuál es el nombre de su unidad de organización?
  [Unknown]:  test
¿Cuál es el nombre de su organización?
  [Unknown]:  test2
¿Cuál es el nombre de su ciudad o localidad?
  [Unknown]:  locality
¿Cuál es el nombre de su estado o provincia?
  [Unknown]:  province
¿Cuál es el código de país de dos letras de la unidad?
  [Unknown]:  es
¿Es correcto CN=Myname, OU=test, O=test2, L=locality, ST=province, C=es?
  [no]:  si

Introduzca la contraseña de clave para <autofirmado>
        (INTRO si es la misma contraseña que la del almacén de claves): <ENTER>

Убедитесь, что новый сгенерированный ключ находится внутри keystore.jks

C:\Program Files\glassfish-4.0\glassfish\domains\domain1\config>keytool -list -k
eystore keystore.jks -alias autofirmado -v
Introduzca la contraseña del almacén de claves:
Nombre de Alias: autofirmado
Fecha de Creación: 21-dic-2014
Tipo de Entrada: PrivateKeyEntry
...

Затем настроил http-listener-2:

alias: autofirmado
keystore: keystore.jks
truststore: cacerts.jks   

Затем перезапустил сервер и попытался получить доступ через https localhost 8181, но получаю сообщение firefox:

"Соединение было прервано"

Если я настрою сервер GlassFish с ключом «s1as» по умолчанию, он будет работать правильно.


person alex    schedule 21.12.2014    source источник


Ответы (1)


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

Неверное имя сертификата

Это случай этого вопроса. В Chrome у меня было следующее сообщение:

NET::ERR_CERT_AUTHORITY_INVALID

Вы должны установить CN=localhost, чтобы он заработал.

What is your first and last name?
  [Unknown]:  localhost

Это также указано в Руководстве по безопасности GlassFish:

Для проверки имени хоста HTTPS важно убедиться, что имя сертификата (CN) совпадает с полным именем хоста вашего сайта (полное доменное имя). Если имена не совпадают, клиенты, подключающиеся к серверу, увидят предупреждение системы безопасности о том, что имя сертификата не соответствует имени сайта.

Неверный алгоритм ключа

Я использовал команду keytool -genkey без указания параметра -keyalg, и это создало сертификат с SHA1withDSA.

Chrome сказал ERR_CONNECTION_CLOSED, и в журнале моего сервера я нашел

javax.net.ssl.SSLHandshakeException: no cipher suites in common

Я решил эту проблему, указав keytool -genkey -keyalg RSA

Измените также сертификат экземпляра стеклянной рыбы

Из руководства по безопасности GlassFish:

DAS использует псевдоним s1as для аутентификации SSL/TLS, а экземпляры используют псевдоним glassfish-instance.

Согласно комментарию к другому ответу "Если вы измените сертификат s1as, вам также потребуется изменить сертификат экземпляра Glassfish. ".

Неправильный файл хранилища ключей

Помните, что:

  • Файл keystore.jks содержит сертификат сервера GlassFish, включая его закрытый ключ.
  • Файл cacerts.jks содержит доверенные сертификаты GlassFish Server, включая открытые ключи для других объектов.

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

# Generate a key pair in keystore.jks
keytool -genkeypair -alias s1as -keystore keystore.jks -keypass changeit -storepass changeit -keyalg RSA
# Export the certificate
keytool -export -keystore keystore.jks -alias s1as -file s1as.cer -storepass changeit
# Import it into the truststore.jks
keytool -import -noprompt -trustcacerts -file s1as.cer -alias s1as -keystore cacerts.jks -storepass changeit

Как проверить

Эта команда показывает информацию о сертификатах:

keytool -v -list -alias <the_alias> -keystore <filename>.jks

Если вы посмотрите на исходные самозаверяющие сертификаты, предоставленные GlassFish, вы получите:

  • CN:
    • Owner: CN=localhost for s1as
    • Owner: CN=localhost-instance для glassfish-instance
  • ЮАР: Signature algorithm name: SHA256withRSA
  • Entry type:
    • Entry type: PrivateKeyEntry for keystore.jks
    • Entry type: trustedCertEntry для cacerts.jks
person xonya    schedule 20.10.2016