Проверка CSR на соответствие хранилищу ключей

#java #ssl #glassfish #keytool #glassfish-4

#java #ssl #glassfish #keytool #glassfish-4

Вопрос:

Я использовал keytool для создания хранилища ключей и, исходя из этого, сгенерировал CSR:

 keytool -genkey 
    -alias server 
    -keyalg RSA 
    -keysize 2048 
    -keystore api_annacares_com.jks 
    -dname "CN=api.example.com, O=Acme Ltd, L=Sydney, ST=New South Wales, C=AU"
keytool -certreq 
    -alias server 
    -file api_example_com.csr 
    -keystore api_example_com.jks
  

Я отправил CSR в Comodo и получил свой положительный сертификат и промежуточные сертификаты.

Я импортировал их следующим образом:

 ./glassfish4/bin/asadmin change-master-password --savemasterpassword=true
keytool -importkeystore 
    -srckeystore api_example_com.jks 
    -destkeystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -import -trustcacerts 
    -alias AddTrustExternalCARoot 
    -file AddTrustExternalCARoot.crt 
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -import -trustcacerts 
    -alias COMODORSAAddTrustCA 
    -file COMODORSAAddTrustCA.crt 
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -import -trustcacerts 
    -alias COMODORSADomainValidationSecureServerCA 
    -file COMODORSADomainValidationSecureServerCA.crt 
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -import -trustcacerts 
    -alias server 
    -file api_example_com.crt 
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks
  

На данный момент я не получал ошибок, но когда я запустил сервер и попытался использовать https вместо http, я получил сообщение об ошибке SSL-соединения из браузера. Другие диагностические инструменты, доступные в Интернете, просто сообщают об отсутствии SSL-сертификата. Когда я использовал keytool для составления списка сертификатов, установленных в хранилище ключей, он сообщал обо всех сертификатах как об отдельных сертификатах, а не как о цепочке.

Затем я попробовал что-то еще… Я использовал Keychain Access в OS X для создания файла p7b, содержащего полный путь к сертификату, от корневого каталога вплоть до моего сертификата. Используя этот метод, я смог проверить в Keychain Access, что вся цепочка сертификатов действительна. Затем я попытался импортировать это с помощью keytool. (Я снова начал с новой установки GlassFish.)

 ./glassfish4/bin/asadmin change-master-password --savemasterpassword=true
keytool -importkeystore 
    -srckeystore api_example_com.jks 
    -destkeystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -importcert -v -trustcacerts 
    -alias server 
    -file api.example.com.p7b 
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks
  

На этот раз keytool выдал сообщение об ошибке:

 keytool error: java.lang.Exception: Failed to establish chain from reply
java.lang.Exception: Failed to establish chain from reply
        at sun.security.tools.KeyTool.establishCertChain(KeyTool.java:3375)
        at sun.security.tools.KeyTool.installReply(KeyTool.java:2583)
        at sun.security.tools.KeyTool.doCommands(KeyTool.java:998)
        at sun.security.tools.KeyTool.run(KeyTool.java:340)
        at sun.security.tools.KeyTool.main(KeyTool.java:333)
  

Я хочу исключить возможность того, что я использую хранилище ключей, которое не соответствует CSR. Я сгенерировал только одно хранилище ключей и один запрос на подпись сертификата, поэтому сомневаюсь, что выбрал неправильное хранилище ключей. Тем не менее, есть ли команда, которую я могу запустить для проверки запроса на подпись сертификата в хранилище ключей, чтобы она сообщила мне, есть ли у меня правильное хранилище ключей?

Ответ №1:

Избавьтесь от параметра ‘-trustcacerts’ на шаге, на котором вы импортируете фактический подписанный сертификат через псевдоним ‘server’. Это не сертификат CA.

Ответ №2:

Хотя я не нашел способа проверить CSR на соответствие хранилищу ключей, чтобы убедиться, что они совпадают, я решил свою проблему. Сначала я импортировал хранилище ключей в хранилище ключей GlassFish, а затем попытался импортировать сертификаты. Я решил эту проблему, сначала импортировав сертификаты в хранилище ключей, из которого был сгенерирован CSR, затем импортировав это хранилище ключей в хранилище ключей GlassFish.

Комментарии:

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

2. Нет, определенно нет. Я сам был озадачен, но это не первый раз, когда я сражаюсь с SSL и GlassFish, и я подозреваю, что это то же самое решение, к которому я пришел в прошлый раз, но забыл.