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

Я использовал 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 и получил свой сертификат PositiveSSL и промежуточные сертификаты.

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

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

2 ответа

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

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

Другие вопросы по тегам