Статьи

Самоподписанный сертификат для Apache TomEE (и Tomcat)

Вероятно, в большинстве ваших проектов Java EE у вас будет частично или полностью система с поддержкой SSL ( https ), чтобы браузеры и серверы могли обмениваться данными через защищенное соединение. Это означает, что отправляемые данные шифруются, передаются и, наконец, дешифруются перед их обработкой. Цифровой сертификат

Проблема в том, что иногда официальное «хранилище ключей» доступно только для производственной среды и не может использоваться на машинах разработки / тестирования. Затем одним из возможных шагов является создание неофициального «хранилища ключей» одним членом команды и предоставление его всем участникам, чтобы каждый мог проводить локальное тестирование с использованием https, и то же самое для тестирования / сред QA.

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

В этом посте мы увидим, как создать и включить SSL в Apache TomEETomcat ) с самозаверяющим сертификатом.

Первое, что нужно сделать, это установить openssl. Этот шаг будет зависеть от вашей ОС. В моем случае я использую Ubuntu 14.04 .

Затем нам нужно сгенерировать 1024-битный закрытый ключ RSA с использованием алгоритма Triple-DES и сохранить его в формате PEM. Я собираюсь использовать каталог {userhome} / certs для генерации всех необходимых ресурсов, но его можно изменить без проблем.

Генерация закрытого ключа

1
openssl genrsa -des3 -out server.key 1024

Здесь мы должны ввести пароль, для этого примера я собираюсь использовать apachetomee (пожалуйста, не делайте этого в производстве).

Создать CSR

Следующим шагом является создание CSR (запроса на подпись сертификата). В идеале этот файл будет создан и отправлен в центр сертификации, например Thawte или Verisign, который проверит личность. Но в нашем случае мы собираемся подписать CSR с предыдущим закрытым ключом.

1
openssl req -new -key server.key -out server.csr

Одной из подсказок будет «Общее имя (например, полное доменное имя сервера или ВАШЕ имя)». Важно, чтобы в этом поле было указано полное доменное имя сервера, защищаемого с помощью SSL. В случае разработки машины вы можете установить «localhost».

Теперь, когда у нас есть закрытый ключ и csr, мы готовы сгенерировать самоподписанный сертификат X.509, действительный в течение одного года, выполнив следующую команду:

Создайте самоподписанный сертификат

1
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Чтобы установить сертификат внутри Apache TomEE (и Tomcat), нам нужно использовать хранилище ключей. Это хранилище ключей генерируется с помощью команды keytool. Чтобы использовать этот инструмент, сертификат должен быть сертификатом PKCS12. По этой причине мы собираемся использовать openssl для преобразования сертификата в формат PKCS12, выполнив:

Подготовьтесь к Apache TomEE

1
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name test_server -caname root_ca

Мы почти закончили, теперь нам нужно только создать хранилище ключей. Я использовал такой же пароль для защиты хранилища ключей, как и во всех других ресурсах,
апачетомее

1
keytool -importkeystore -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcalias test_server -destalias test_server

Теперь у нас есть файл keystore.jks, созданный в каталоге {userhome} / certs.

Установка Keystore в Apache TomEE

Процесс установки хранилища ключей в Apache TomEE (и Tomcat) описан в http://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html . Но в итоге нужно только открыть $ {TOMEE_HOME} /config/server.xml и определить коннектор SSL.

1
2
3
4
5
6
<Service name="Catalina">
  <Connector port="8443" protocol="HTTP/1.1"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               keystoreFile="${user.home}/certs/keystore.jks" keystorePass="apachetomee"
               clientAuth="false" sslProtocol="TLS" />
</Service>

Обратите внимание, что вам нужно установить местоположение хранилища ключей в моем случае {userhome} /certs/keystore.jks и пароль, который будет использоваться для открытия хранилища ключей, которое является apachetomee.

Подготовка браузера

Перед запуском сервера нам нужно добавить server.crt в качестве допустимых прав доступа в браузере.

В Firefox: Настройки Firefox -> Дополнительно -> Просмотр сертификатов -> Полномочия (вкладка), а затем импортируйте файл server.crt.

В Chrome: Настройки -> HTTPS / SSL -> Управление сертификатами … -> Полномочия (вкладка), а затем импортируйте файл server.crt.

И теперь вы готовы запустить Apache TomEE (или Tomcat), и вы можете перейти к любому развернутому приложению, но используя https и порт 8443.

И это все, теперь мы можем запускать тесты (с Selenium ), не беспокоясь о предупреждении о недоверенных сертификатах.