Проверьте 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.