bg-tutorials

Как установить SSL-сертификат на сервере JBoss

В этом руководстве показано, как установить SSL-сертификат на JBoss EAP и WildFly, используя keytool и подсистему безопасности Elytron. Если у вас еще нет файлов сертификата, в первом разделе описано, как сгенерировать CSR.

Замечание о версиях: современные версии JBoss EAP (7.1 и более поздние, включая EAP 8) и последние релизы WildFly настраивают HTTPS через подсистему elytron, подключенную к https-listener Undertow. Старый метод security-realm и устаревшие коннекторы Tomcat или Jetty признаны устаревшими, поэтому в данном руководстве используется актуальный подход.

Мы также записали видео, которое проведет вас через весь процесс. Вы можете посмотреть видео, прочитать инструкции или сделать и то, и другое. Видео доступно ниже.

Генерация кода CSR на JBoss

CSR (запрос на подпись сертификата) — это блок закодированного текста, который вы отправляете в удостоверяющий центр (CA) при заказе сертификата. Он содержит данные о вашем домене и организации, которые CA использует для проверки запроса. При генерации CSR также создается соответствующий приватный ключ, который остается на вашем сервере и требуется при установке.

У вас есть два варианта:

На JBoss CSR генерируется с помощью keytool из хранилища ключей .jks или .p12. Запомните псевдоним (alias) и имя хранилища ключей, которые вы сейчас выберете: позже вам нужно будет импортировать подписанный сертификат обратно в этот же псевдоним. Отправьте CSR в CA при оформлении заказа, а после выпуска сертификата переходите к установке ниже.

Установка SSL-сертификата на сервере JBoss

Шаг 1: Подготовьте файлы сертификата

После проверки CA отправит вам файлы сертификата по электронной почте, обычно в архиве ZIP. Распакуйте его. У вас должны быть:

  • Ваш основной сертификат (файл .crt, .cer или .pem).
  • Промежуточные сертификаты, часто поставляемые в виде файла .ca-bundle (CA-бандл). Некоторые CA также включают корневой сертификат.
  • Хранилище ключей (.jks или .p12), которое вы создали вместе с CSR и в котором хранится ваш приватный ключ под псевдонимом, выбранным при генерации CSR.

Держите эти файлы вместе и скопируйте их на сервер, например, в каталог конфигурации JBoss ($JBOSS_HOME/standalone/configuration/). Если файл открывается как текст, вы можете убедиться, что он содержит ожидаемые строки BEGIN CERTIFICATE и END CERTIFICATE.

Шаг 2: Импортируйте цепочку CA в хранилище ключей

Сначала импортируйте промежуточные (и корневой, если он предоставлен) сертификаты, чтобы keytool мог построить полную цепочку доверия. Используйте то же хранилище ключей, в котором находится ваш приватный ключ, и присвойте каждому сертификату CA свой собственный псевдоним:

keytool -import -trustcacerts -alias root -file root.crt -keystore your_keystore.jks

keytool -import -trustcacerts -alias intermediate -file intermediate.crt -keystore your_keystore.jks

Если ваш CA прислал единый файл .ca-bundle, импортируйте его под одним псевдонимом (например, -alias intermediate). При запросе введите пароль хранилища ключей и подтвердите доверие. Эти записи являются доверенными сертификатами, а не записями ключей, поэтому они не влияют на ваш приватный ключ.

Шаг 3: Импортируйте подписанный сертификат в псевдоним вашего ключа

Теперь импортируйте подписанный сертификат (ответ от CA) в тот же псевдоним, который вы использовали при генерации CSR. Поскольку этот псевдоним уже содержит приватный ключ, keytool воспринимает это как ответ на сертификат и заменяет временный самоподписанный сертификат подписанной CA цепочкой, сохраняя ключ нетронутым:

keytool -import -trustcacerts -alias your_csr_alias -file your_domain.crt -keystore your_keystore.jks

Замените your_csr_alias на псевдоним, использованный при генерации CSR, и your_keystore.jks на имя вашего хранилища ключей. При успешном выполнении keytool выводит сообщение Certificate reply was installed in keystore.

Важно: не придумывайте здесь новый псевдоним. Импорт ответа под новым псевдонимом создаст запись доверенного сертификата без приватного ключа, цепочка будет утрачена, и сервер не сможет завершить рукопожатие TLS. Если вы видите сообщение Failed to establish chain from reply, это означает, что промежуточный или корневой сертификат из Шага 2 отсутствует в хранилище ключей.

Вы можете проверить результат — теперь для псевдонима должна отображаться цепочка сертификатов длиной более 1:

keytool -list -v -alias your_csr_alias -keystore your_keystore.jks

Шаг 4: Настройте HTTPS в подсистеме Elytron

Поместите хранилище ключей в $JBOSS_HOME/standalone/configuration/, затем определите key-store, key-manager и server-ssl-context Elytron. Самый быстрый способ — использовать интерфейс командной строки управления. Запустите сервер, подключитесь с помощью jboss-cli.sh --connect и выполните пакетную команду, чтобы изменения применились сразу:

batch

/subsystem=elytron/key-store=httpsKS:add(path=your_keystore.jks, relative-to=jboss.server.config.dir, credential-reference={clear-text=your_keystore_password}, type=JKS)

/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS, credential-reference={clear-text=your_keystore_password})

/subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM, protocols=["TLSv1.3","TLSv1.2"])

run-batch

Затем укажите новому https-listener Undertow на новый ssl-context. Undertow не может одновременно ссылаться на устаревший security-realm и на ssl-context Elytron, поэтому удалите старую ссылку и установите новую в одном пакете:

batch

/subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)

/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=httpsSSC)

run-batch

Если вы предпочитаете редактировать standalone.xml напрямую (при остановленном сервере), эквивалентная конфигурация выглядит так внутри подсистемы elytron:

<tls>
    <key-stores>
        <key-store name="httpsKS">
            <credential-reference clear-text="your_keystore_password"/>
            <implementation type="JKS"/>
            <file path="your_keystore.jks" relative-to="jboss.server.config.dir"/>
        </key-store>
    </key-stores>
    <key-managers>
        <key-manager name="httpsKM" key-store="httpsKS">
            <credential-reference clear-text="your_keystore_password"/>
        </key-manager>
    </key-managers>
    <server-ssl-contexts>
        <server-ssl-context name="httpsSSC" key-manager="httpsKM" protocols="TLSv1.3 TLSv1.2"/>
    </server-ssl-contexts>
</tls>

А соответствующий listener в подсистеме undertow ссылается на этот ssl-context:

<https-listener name="https" socket-binding="https" ssl-context="httpsSSC" enable-http2="true"/>

Ограничение protocols до TLS 1.3 и TLS 1.2 отключает устаревшие TLS 1.0 и 1.1. Стандартный порт HTTPS — 8443; сопоставьте его с портом 443 с помощью балансировщика нагрузки или перенаправления портов, если вам нужен стандартный порт.

Шаг 5: Перезапустите JBoss

Если вы редактировали standalone.xml вручную, перезапустите сервер, чтобы загрузить новую конфигурацию. Если вы использовали пакетные команды CLI выше, изменения применяются сразу, но перезагрузка подтвердит чистый запуск:

jboss-cli.sh --connect --command=:reload

Следите за журналом сервера на предмет ошибок SSL или Elytron во время запуска. После чистого запуска ваш SSL-сертификат установлен на JBoss.

Проверьте установку SSL

После установки убедитесь, что сертификат и цепочка сертификатов обслуживаются корректно. Откройте ваш сайт по HTTPS (например, https://www.yourdomain.com:8443) и проверьте значок замка, либо запустите внешнюю проверку с помощью нашего SSL Checker, чтобы получить полный отчет о сертификате, цепочке и поддержке протоколов. Также можно проверить через командную строку:

echo | openssl s_client -connect yourdomain.com:8443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -dates

Эта команда выводит информацию об издателе и датах действия сертификата, который в данный момент обслуживает JBoss. Если издателем указан ваш CA (а не самоподписанная запись), значит, ответ был импортирован правильно.

Часто задаваемые вопросы

Как узнать, установлен ли SSL-сертификат на JBoss?

Подключитесь к порту HTTPS с помощью OpenSSL и прочитайте сертификат, который возвращает сервер:
echo | openssl s_client -connect yourdomain.com:8443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -subject -dates
Если сертификат установлен, эта команда выведет его издателя, субъект и даты действия. Вы также можете проверить хранилище ключей с помощью keytool -list -v -keystore your_keystore.jks, либо открыть ваш сайт в браузере и проверить значок замка.

Куда поместить SSL-сертификат в JBoss?

Сертификат хранится внутри хранилища ключей, а хранилище ключей указывается в key-store Elytron. Обычное расположение — каталог конфигурации сервера, $JBOSS_HOME/standalone/configuration/, при этом путь к key-store Elytron задается как relative-to jboss.server.config.dir. Вы можете хранить его и в другом месте, если путь key-store указывает на него.

Почему keytool выдает сообщение «Failed to establish chain from reply»?

keytool не смог построить путь от вашего сертификата до доверенного корневого сертификата. Сначала импортируйте промежуточные (и корневой, если он предоставлен) сертификаты в то же хранилище ключей с параметром -trustcacerts, затем импортируйте подписанный ответ в псевдоним вашего CSR. Если вы импортировали ответ под совершенно новым псевдонимом, приватный ключ будет утрачен: удалите эту запись и повторно импортируйте в исходный псевдоним ключа.

Как проверить срок действия SSL-сертификата в JBoss?

Выполните команду keytool -list -v -keystore your_keystore.jks и прочитайте строку Valid from для вашего псевдонима, либо используйте команду OpenSSL выше, чтобы увидеть даты, которые сообщает работающий сервер. Сроки действия публичных TLS-сертификатов сокращаются в соответствии с правилами CA/Browser Forum: с 15 марта 2026 года максимальный срок составит 200 дней, снизившись до 100 дней в 2027 году и до 47 дней в 2029 году. Отслеживайте даты продления и обновляйте сертификаты до истечения срока действия, либо автоматизируйте выпуск, если ваш CA это поддерживает.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете
Написано

Опытный автор контента, специализирующийся на SSL-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.