Как реализовать защиту по 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. 

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *