Одной из важных задач защиты Tomcat является настройка SSL-сертификата, потому что веб-приложение доступно через HTTPS.
Есть много способов добиться этого.
- Вы можете ограничить SSL при балансировке нагрузки
- Внедрить SSL на уровне CDN
- Используйте веб-серверы, такие как Apache, Nginx и т. д., И внедряйте SSL там
Однако, если вы не используете ни одно из указанных выше методов, или вам необходимо установить SSL непосредственно в Tomcat, то вам поможет следующая статья.
В этой статье мы сделаем, как показано ниже.
- Сгенерировать CSR (запрос подписи сертификата)
- Импорт сертификата в файл хранилища ключей
- Включить SSL в Tomcat
- Настройка протокола TLS
- Изменение Tomcat для прослушивания на 443-порте
- Тест Tomcat для уязвимости SSL
Давайте начнем…
Подготовка сертификата SSL / TLS
Первым шагом необходимо создать CSR и получить его, подписанный центром сертификации.
Мы будем использовать утилиту keytool для управления сертификатами.
- Вход на сервер Tomcat
- Перейдите к пути установки tomcat
- Создайте папку с именем ssl
- Выполнить команду для создания хранилища ключей:
# keytool -genkey -alias domainname -keyalg RSA -keysize 2048 -keystore filename.jks
В приведенных выше командах есть две переменные, которые вы можете изменить.
Alias – лучше сохранить его значимым, поэтому в будущем вы сможете быстро распознать. Я предпочитаю хранить его как доменное имя.
Filename- опять же, полезно сохранить доменное имя.
Пример:
[root@itsecforu.ru ssl]# keytool -genkey -alias itsecforu.ru -keyalg RSA -keysize 2048 -keystore itsecforu.ru .jks Enter keystore password: Re-enter new password: What is your first and last name? [Unknown]: itsecforu.ru What is the name of your organizational unit? [Unknown]: itsecf What is the name of your organization? [Unknown]: itsecforu What is the name of your City or Locality? [Unknown]: What is the name of your State or Province? [Unknown]: What is the two-letter country code for this unit? [Unknown]: Is CN=itsecforu.ru , OU=itsecforu.ru , O=itsecforu.ru , L=Unknown, ST=Unknown, C=Unknown correct? [no]: yes Enter key password for <itsecforu.ru > (RETURN if same as keystore password): [root@itsecforu.ru ssl]#
Обратите внимание на первый и последний вопрос. Думаю, это немного обманчиво. Это не ваше имя, а имя домена, которое вы хотите защитить.
После того, как вы предоставите всю информацию, он создаст файл хранилища ключей в текущем рабочем каталоге.
Далее следует создать новый CSR с вновь созданным хранилищем ключей с помощью команды, представленной ниже.
# keytool -certreq -alias itsecforu -keyalg RSA -file itsecforu.csr -keystore itsecforu.jks
Это действие создаст CSR, который необходимо отправить в центр сертификации, чтобы получить его.
Если вы тренеруетесь или пробуете, вы можете подумать о том, что можете использовать БЕСПЛАТНЫЙ провайдер сертификатов, чтобы дальше в случае серьезности перейти на премиальный.
Я получил подписанный сертификат и перейду к импорту в хранилище ключей с помощью команды ниже.
Импорт корневого сертификата предоставленного поставщиком:
# keytool -importcert -alias root -file root -keystore itsecforu.jks
Импортировать промежуточный сертификат:
# keytool -importcert -alias intermediate -file intermediate -keystore itsecforu.jks
Примечание: без импорта корневого и промежуточного, вы не сможете импортировать сертификат домена в хранилище ключей.
Если у вас более одного промежуточного уровня, вы должны импортировать их все.
Импортировать сертификат домена
# keytool -importcert -file itsecforu.cer -keystore itsecforu.jks -alias itsecforu
и вы получите подтверждение, что он был установлен.
Certificate reply was installed in keystore
Отлично, мы видим что хранилище сертификатов уже готово.
Перейдем к следующему шагу.
Включить SSL в Tomcat
Предполагая, что вы все еще зарегистрированы на сервере Tomcat, перейдите в папку conf
- Сделайте резервную копию файла server.xml
- Перейдите в раздел <Connector port = “8080” protocol = “HTTP / 1.1” и добавьте строку:
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
3. Не забудьте изменить имя и пароль файла хранилища ключей на свои
4. Перезапустите tomcat, и вы увидите, что Tomcat доступен через HTTPS
Стандартный порт HTTPS
Зачем?
Ну, если вы посмотрите на скриншот выше, я обращаюсь к Tomcat с портом 8080 по https, который не является стандартным и еще несколько причин.
Вы не хотите спрашивать пользователей использовать ли пользовательский порт
Браузер будет выдавать предупреждение, поскольку сертификат выдается на имя домена без порта
Поэтому идея состоит в том, чтобы заставить Tomcat прослушивать порт 443, чтобы он был доступен только через https: // без номера порта.
Для этого отредактируйте файл server.xml вашим любимым тестовым редактором
- Перейдите к <Connector port = “8080”
- Изменить порт с 8080 до 443
- Это должно выглядеть так
<Connector port="443" protocol="HTTP/1.1" connectionTimeout="20000" SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS" redirectPort="8443" />
Перезапустите Tomcat и получите доступ к вашему приложению с помощью https без номера порта
Впечатляет, это успех!
Проверка уязвимости SSL / TLS
Наконец, мы проведем тест, чтобы убедиться, что он не уязвим для онлайн-угроз.
Существует множество онлайн-инструментов, которые я обсуждал здесь, и здесь я буду использовать SSL Labs.
Перейдите в SSL Labs и введите URL-адрес, чтобы начать тест
Как видно, наш рейтинг зеленый
Тем не менее, всегда будет не лишним прокрутить вниз отчет и посмотреть, обнаружите ли вы какую-либо уязвимость и исправьте ее при наличии.
Надеюсь, это поможет вам узнать о процедуре обеспечения безопасности Tomcat с сертификатом SSL / TLS.