Если у вас уже есть установленный и настроенный Apache Tomcat, то вы, вероятно, захотите настроить на нём HTTPS. Все нормальные банки, почтовые сервисы и более менее приличные сайты, работающие с персональными данными, используют HTTPS. При использовании HTTPS данные, передаваемые от клиента к серверу и обратно, шифруются. HTTPS не является отдельным протоколом, так как он использует SSL (Secure Sockets Layer) и TLS (Transport Layer Security) для шифрования обычного HTTP.Для начала создадим самоподписанный сертификат.
Windows:
1
|
«%JAVA_HOME%\bin\keytool» -genkey -alias tomcat -keyalg RSA
|
Unix:
1
|
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
|
После этого вас попросят ввести пароль для файла хранилища, фамилию, имя, название организации и прочее. В конце нужно будет ввести пароль для ключа tomcat. По умолчанию Apache Tomcat в качестве пароля использует «changeit».
Описанная выше команда создаёт файл хранилища ключей.keystore в вашем домашнем каталоге с ключом tomcat. Имейте в виду, что подобный самоподписанный сертификат подойдёт только для тестовых и образовательных целей. На реальном сервере нужно использовать сертификат от хорошо известного центра сертификации, например VeriSign, Thawte или Let’s Encrypt (бесплатный).
Apache Tomcat на текущий момент работает только с форматами хранилищ JKS, PKCS11 или PKCS12. Формат JSK — это стандартный формат “Java Keystore”, и именно он создаётся утилитой keytool. Формат PKCS12 — это стандартный формат для интернета.
Каждая запись в хранилище ключей идентифицируется по строке alias. Многие реализации хранилищ расценивают alias-ы регистронезависимо, но существуют реализации, которые различают регистры символов. Спецификация PKCS11, например, требует, чтобы alias-ы были зависимы от регистра.
Читайте документацию на утилиту keytool в JDK, чтобы импортировать существующий сертификат в хранилище ключей JSK. OpenSSL часто добавляет читаемые комментарии перед ключом, но keytool не поддерживает это. Если ваш сертификат имеет комментарии перед данными, то удалите их перед импортом с помощью keytool.
Импортировать существующий сертификат вашего удостоверяющего центра в хранилище ключей PKCS12 с помощью OpenSSL можно так:
1
2
3
|
openssl pkcs12 -export -in mycert.crt -inkey mykey.key
-out mycert.p12 -name tomcat -CAfile myCA.crt
-caname root -chain
|
Теперь нужно поправить конфигурацию Apache Tomcat в файле<путь к Apache Tomcat>/conf/server.xml. Пример настройки Connector-а для HTTPS уже есть в этом файле. Вам нужно его раскомментировать и поправить, чтобы он выглядел примерно так:
1
2
3
4
5
6
7
|
<!— Define a SSL Coyote HTTP/1.1 Connector on port 8443 —>
<Connector
protocol=«org.apache.coyote.http11.Http11NioProtocol»
port=«8443» maxThreads=«200»
scheme=«https» secure=«true» SSLEnabled=«true»
keystoreFile=«${user.home}/.keystore» keystorePass=«changeit»
clientAuth=«false» sslProtocol=«TLS»/>
|
Если при создании хранилища вы указали пароль, отличный от«changeit» , то его нужно будет прописать в атрибуте kestorePass.
Попробуйте зайти на свой сервис, указав в качестве протокола https (https://<your_site>, например https://localhost:8080/myapp). У вас появится картинка вида (зависит об браузера):
Это предупреждение возникает из-за использование самоподписанного сертификата. Чтобы его не было, нужно использовать сертификат, выданный нормальным центром сертификации. В этом окне обычно содержится большая кнопка с надписью «Уходим отсюда!», «Прочь отсюда» или «Назад к безопасности» и маленькая еле заметная ссылка, которая позволяет войти на сайт. В Firefox это ссылка «Я понимаю риск», затем кнопка «Добавить исключение». После чего вы войдёте на сайт, и в адресной строке будет отображён замочек и протокол https, указывающие что используется шифрование.