Вероятно, в большинстве ваших проектов Java EE у вас будет частично или полностью система с поддержкой SSL ( https ), чтобы браузеры и серверы могли обмениваться данными через защищенное соединение. Это означает, что отправляемые данные шифруются, передаются и, наконец, дешифруются перед их обработкой.
Проблема в том, что иногда официальное «хранилище ключей» доступно только для производственной среды и не может использоваться на машинах разработки / тестирования. Затем одним из возможных шагов является создание неофициального «хранилища ключей» одним членом команды и предоставление его всем участникам, чтобы каждый мог проводить локальное тестирование с использованием https, и то же самое для тестирования / сред QA.
Но, используя этот подход, вы сталкиваетесь с одной проблемой: когда вы собираетесь запустить приложение, вы получите предупреждение / сообщение об ошибке, что сертификат не заслуживает доверия. Вы можете жить с этим, но также мы можем сделать это лучше и избежать этой ситуации, создав самозаверяющий сертификат SSL.
В этом посте мы увидим, как создать и включить SSL в Apache TomEE (и Tomcat ) с самозаверяющим сертификатом.
Первое, что нужно сделать, это установить 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 ), не беспокоясь о предупреждении о недоверенных сертификатах.
Ссылка: | Самоподписанный сертификат Apache TomEE (и Tomcat) от нашего партнера по JCG Алекса Сото в блоге One Jar To Rule All . |