Статьи

SSL с WildFly 8 и Undertow

Я пробирался через некоторые темы безопасности вдоль WildFly 8 и наткнулся на некоторые параметры конфигурации, которые не очень хорошо документированы. Одним из них является конфигурация TLS / SSL для новой веб-подсистемы Undertow . Существует много документации для старой веб-подсистемы, и она действительно все еще доступна для использования, но вот краткое руководство по ее настройке по-новому. прибойный-SSL-конфигурации

Создать хранилище ключей и самозаверяющий сертификат

Первым шагом является создание сертификата. В этом случае он будет самоподписанным, и этого достаточно, чтобы показать, как все настроить. Я собираюсь использовать простой Java-способ сделать это, так что все, что вам нужно, это инструментальное средство JRE. Java Keytool – это утилита управления ключами и сертификатами. Это позволяет пользователям управлять своими собственными парами открытого и закрытого ключей и сертификатами. Это также позволяет пользователям кэшировать сертификаты. Java Keytool хранит ключи и сертификаты в так называемом хранилище ключей. По умолчанию хранилище ключей Java реализовано в виде файла. Защищает приватные ключи паролем. Хранилище ключей Keytool содержит закрытый ключ и все сертификаты, необходимые для завершения цепочки доверия и установления надежности первичного сертификата.

Имейте в виду, что сертификат SSL служит двум основным целям: распространение открытого ключа и проверка личности сервера, чтобы пользователи знали, что они не отправляют свою информацию на неправильный сервер. Он может правильно проверить подлинность сервера только тогда, когда он подписан доверенной третьей стороной. Самоподписанный сертификат – это сертификат, который подписан сам по себе, а не как доверенный орган.

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
$>keytool -genkey -alias mycert -keyalg RSA -sigalg MD5withRSA -keystore my.jks -storepass secret  -keypass secret -validity 9999
 
What is your first and last name?
  [Unknown]:  localhost
What is the name of your organizational unit?
  [Unknown]:  myfear
What is the name of your organization?
  [Unknown]:  eisele.net
What is the name of your City or Locality?
  [Unknown]:  Grasbrun
What is the name of your State or Province?
  [Unknown]:  Bavaria
What is the two-letter country code for this unit?
  [Unknown]:  ME
Is CN=localhost, OU=myfear, O=eisele.net, L=Grasbrun, ST=Bavaria, C=ME correct?
  [no]:  yes

Убедитесь, что вы указали желаемое «имя хоста» в поле «имя и фамилия», в противном случае вы можете столкнуться с проблемами при постоянном принятии этого сертификата в качестве исключения в некоторых браузерах. Chrome не имеет проблем с этим, хотя.

Команда создает файл my.jks в папке, в которой он выполняется. Скопируйте его в каталог конфигурации WildFly (% JBOSS_HOME% / standalone / config).

Настройте дополнительную область безопасности WildFly

Следующим шагом является настройка нового хранилища ключей в качестве идентификатора сервера для ssl в разделе областей безопасности WildFly в standalone.xml (если вы используете -ha или другие версии, отредактируйте их).

01
02
03
04
05
06
07
08
09
10
11
 <management>
        <security-realms>
<!-- ... -->
 <security-realm name="UndertowRealm">
                <server-identities>
                    <ssl>
                        <keystore path="my.keystore" relative-to="jboss.server.config.dir" keystore-password="secret" alias="mycert" key-password="secret"/>
                    </ssl>
                </server-identities>
            </security-realm>
<!-- ... -->

И вы готовы к следующему шагу.

Настройте Подсистему Поднятия для SSL

Если вы работаете с сервером по умолчанию, добавьте https-слушатель в подсистему undertow:

1
2
3
4
5
6
  <subsystem xmlns="urn:jboss:domain:undertow:1.2">
         <!-- ... -->
            <server name="default-server">
            <!-- ... -->
                <https-listener name="https" socket-binding="https" security-realm="UndertowRealm"/>
<! -- ... -->

Теперь все готово для подключения к порту ssl вашего экземпляра https: // localhost: 8443 / . Обратите внимание, что вы получаете ошибку конфиденциальности (сравните скриншот). Если вам нужно использовать полностью подписанный сертификат, вы в основном получаете PEM-файл от центра сертификации. В этом случае вам необходимо импортировать это в хранилище ключей. Этот поток в стеке может помочь вам в этом.