Настройка SSL/TLS в Tomcat#
Transport Layer Security (TLS) и Secure Sockets Layer (SSL) — механизмы, которые позволяют веб-браузерам и веб-серверам обмениваться данными по защищенному соединению: отправляемые данные шифруются на одной стороне, передаются, а затем расшифровываются на другой стороне перед обработкой. Это двусторонний процесс – сервер и браузер шифруют весь трафик перед отправкой данных.
Еще одним важным аспектом протокола SSL/TLS является аутентификация. При первой попытке установить защищенное соединение с веб-сервером, сервер представит браузеру набор учетных данных в виде сертификата, чтобы доказать, что сайт является подлинным. В некоторых случаях сервер может также запросить сертификат у браузера, чтобы удостовериться в личности пользователя.
Настройка Tomcat для использования защищенных сокетов обычно требуется только при его запуске в качестве автономного веб-сервера. Если Tomcat работает в основном как контейнер Servlet/JSP вместе с другим веб-сервером, то обычно необходимо настроить основной веб-сервер для обработки SSL-соединений от пользователей. Как правило, данный сервер будет обрабатывать все SSL-функции, а затем передавать расшифрованные запросы в Tomcat. Tomcat в свою очередь возвращает ответы в открытом виде, которые затем шифруются перед отправкой в браузер пользователя. В такой среде Tomcat информирован, что обмен данными между основным веб-сервером и клиентом происходит по защищенному соединению, но сам не участвует в шифровании или расшифровке.
Tomcat может использовать любые протоколы шифрования, предоставляемые базовой средой. Java предоставляет возможности шифрования через JCE/JCA и возможности зашифрованной связи через JSSE. Tomcat может использовать любой совместимый провайдер шифрования, который может предоставить нужные алгоритмы. Встроенный провайдер (SunJCE) включает поддержку различных версий SSL/TLS: SSLv3, TLSv1.2 и других.
Сертификаты#
Для реализации SSL веб-сервер должен иметь связанный сертификат для каждого внешнего интерфейса (IP-адреса), который принимает защищенные соединения. Данный сертификат должен быть подписан его владельцем. Чтобы сертификат работал в браузерах пользователей, он должен быть подписан CA (Центром сертификации).
Java предоставляет интерфейс командной строки keytool, с помощью которой можно создать самоподписанный сертификат. Самоподписанные сертификаты — это сертификаты, сгенерированные пользователем, которые не были подписаны известным CA и, следовательно, не гарантируют подлинность.