#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, и я подозреваю, что это то же самое решение, к которому я пришел в прошлый раз, но забыл.