Если у вас уже есть установленный и настроенный 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, указывающие что используется шифрование.