Как реализовать защиту по SSL в Apache Tomcat👨⚕️

Одной из важных задач защиты 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

  1. Сделайте резервную копию файла server.xml
  2. Перейдите в раздел <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. 

 



2018-01-25T17:42:14
Закрытие уязвимостей