Я провел некоторое исследование того, как подготовить подстановочный сертификат и добавить его таким образом, чтобы его можно было использовать в WildFly / JBoss (я использую WildFly 16, но он должен быть таким же для JBoss).
Файлы, которые у меня есть (и какие они есть - собраны из Определение типов SSL-сертификатов GoDaddy):
<series of numbers>.crt
: Мой сертификатgd_bundle-g2-g1.crt
: Комплекты сертификатов GoDaddy - G2 с перекрестием на G1, включая Rootgdig2.crt.pem
: Сертификат защищенного сервера GoDaddy (промежуточный сертификат) - G2privatekey.txt
: Закрытый ключ для моего сертификатаБлагодаря серии исследований и помощи коллеги я обнаружил, что могу подготовить и добавить сертификаты с помощью следующих команд:
openssl pkcs12 -export -in <series of numbers>.crt -inkey privatekey.txt -out outfile.pkcs12 -name yourdomain.com -CAfile gd_bundle-g2-g1.crt -caname root
<enter a password>
keytool -importkeystore -trustcacerts -deststorepass <newpass> -destkeypass <newpass> -destkeystore new.keystore -srckeystore outfile.pkcs12 -srcstoretype PKCS12 -srcstorepass <password entered above> -alias yourdomain.com
Итак, все это работает, по крайней мере, из браузера. Я могу просматривать страницы, размещенные через WildFly, и они работают нормально, а браузер не сообщает об ошибках SSL. Однако имеющееся у меня приложение, использующее соединения WebSocket, не смогло проверить сертификат. Чтобы разобраться в этом подробнее, я использовал на своем сайте следующее:
openssl s_client -connect yoursite.yourdomain.com:443
В результате получилось следующее:
Verification error: unable to verify the first certificate
Изучив это, я обнаружил, что Firefox выполнит «обнаружение сертификатов» и разрешит цепочку для проверки сертификата сервера, даже если он не был предоставлен. Итак, я пытаюсь определить, чего не хватает ...
Пытаясь решить эту проблему, я подозревал, что исключенные файлы необходимы для разрешения цепочки, но не мог легко определить, как их получить. Я провел несколько проб и ошибок и каждый раз тестировал с openssl s_client, пока не выяснил, что работал. Это была серия команд, которые разрешили цепочку прямо с сервера:
cat <series of numbers>.crt gdig2.crt.pem > bundle.crt
openssl pkcs12 -export -in bundle.crt -inkey privatekey.txt -out outfile.pkcs12 -name yourdomain.com -CAfile gd_bundle-g2-g1.crt -caname root
<enter a password>
keytool -importkeystore -trustcacerts -deststorepass <newpass> -destkeypass <newpass> -destkeystore new.keystore -srckeystore outfile.pkcs12 -srcstoretype PKCS12 -srcstorepass <password entered above> -alias yourdomain.com
Простое добавление решило проблему. Надеюсь, это поможет кому-то другому!