Настройка HTTPS (SSL/TLS) в Apache Tomcat 8

Если у вас уже есть установленный и настроенный Apache Tomcat, то вы, вероятно, захотите настроить на нём HTTPS. Все нормальные банки, почтовые сервисы и более менее приличные сайты, работающие с персональными данными, используют HTTPS. При использовании HTTPS данные, передаваемые от клиента к серверу и обратно, шифруются. HTTPS не является отдельным протоколом,  так как он использует SSL (Secure Sockets Layer) и TLS (Transport Layer Security) для шифрования обычного HTTP.Для начала создадим самоподписанный сертификат.

Windows:

Unix:

После этого вас попросят ввести пароль для файла хранилища, фамилию, имя, название организации и прочее. В конце нужно будет ввести пароль для ключа 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 можно так:

Теперь нужно поправить конфигурацию Apache Tomcat в файле<путь к Apache Tomcat>/conf/server.xml. Пример настройки Connector-а для HTTPS уже есть в этом файле. Вам нужно его раскомментировать и поправить, чтобы он выглядел примерно так:

Если при создании хранилища вы указали пароль, отличный от«changeit» , то его нужно будет прописать в атрибуте kestorePass.

Попробуйте зайти на свой сервис, указав в качестве протокола https (https://<your_site>, например https://localhost:8080/myapp). У вас появится картинка вида (зависит об браузера):

Mozilla Firefox: Это соединение является недоверенным.

Это предупреждение возникает из-за использование самоподписанного сертификата. Чтобы его не было, нужно использовать сертификат, выданный нормальным центром сертификации. В этом окне обычно содержится большая кнопка с надписью «Уходим отсюда!», «Прочь отсюда» или «Назад к безопасности» и маленькая еле заметная ссылка, которая позволяет войти на сайт. В Firefox это ссылка «Я понимаю риск», затем кнопка «Добавить исключение». После чего вы войдёте на сайт, и в адресной строке будет отображён замочек и протокол https, указывающие что используется шифрование.