Як реалізувати SSL в Apache Tomcat?

Детальний посібник з налаштування SSL/TLS сертифіката на сервері 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

У наведеній команді ви можете змінити дві змінні:

  • Псевдонім – рекомендується використовувати значущий псевдонім для швидкого розпізнавання в майбутньому, наприклад, доменне ім’я.
  • Ім’я файлу – також рекомендується використовувати доменне ім’я.
  • Наприклад:

    [[email protected] ssl]# keytool -genkey -alias bloggerflare -keyalg RSA -keysize 2048 -keystore bloggerflare.jks
    Введіть пароль сховища ключів:
    Повторіть новий пароль:
    Яке ваше ім'я та прізвище?
    [Unknown]: bloggerflare.com
    Яка назва вашого організаційного підрозділу?
    [Unknown]: Blogging
    Яка назва вашої організації?
    [Unknown]: Geek Flare
    Яка назва вашого міста чи місцевості?
    [Unknown]:
    Яка назва вашого штату чи провінції?
    [Unknown]:
    Який дволітерний код країни для цього підрозділу?
    [Unknown]:
    Чи вірно CN=bloggerflare.com, OU=Blogging, O=Geek Flare, L=Unknown, ST=Unknown, C=Unknown?
    [no]: yes
    
    Введіть пароль ключа для <bloggerflare>
    (RETURN, якщо такий самий, як пароль сховища ключів):
    
    [[email protected] ssl]#

    Зверніть увагу на запитання щодо імені та прізвища. Це не ваше ім’я, а доменне ім’я, яке потрібно захистити.

    Після введення всіх даних, у поточному робочому каталозі буде створено файл сховища ключів.

    Далі, з щойно створеного сховища ключів, за допомогою наступної команди створюється CSR:

    keytool -certreq -alias bloggerflare -keyalg RSA -file bloggerflare.csr -keystore bloggerflare.jks

    Створений CSR потрібно надіслати до центру сертифікації для підписання. Якщо ви тестуєте, ви можете скористатись безкоштовним постачальником сертифікатів, в іншому випадку оберіть платний варіант.

    Після підписання сертифіката, перейдемо до його імпорту в сховище ключів, використовуючи наведені команди:

    • Імпорт кореневого сертифіката, який надається постачальником
    keytool -importcert -alias root -file root -keystore bloggerflare.jks
    • Імпорт проміжного сертифіката
    keytool -importcert -alias intermediate -file intermediate -keystore bloggerflare.jks

    Примітка: без імпорту кореневого та проміжного сертифікатів ви не зможете імпортувати сертифікат домену в сховище ключів. Якщо у вас є кілька проміжних сертифікатів, їх потрібно імпортувати всі.

    • Імпорт сертифіката домену
    keytool -importcert -file bloggerflare.cer -keystore bloggerflare.jks -alias bloggerflare

    Ви отримаєте підтвердження успішного встановлення.

    Сертифікат успішно імпортовано до сховища ключів.

    Відмінно, сховище ключів сертифікатів готове. Переходимо до наступного етапу.

    Якщо ви новачок у сфері SSL і бажаєте дізнатися більше, зверніть увагу на цей онлайн-курс: Операції SSL/TLS.

    Активація SSL у Tomcat

    Залишаючись на сервері Tomcat, перейдіть до папки “conf”.

    • Зробіть резервну копію файлу server.xml
    • Знайдіть секцію
    SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
    • Не забудьте замінити ім’я файлу сховища ключів та пароль на ваші
    • Перезапустіть Tomcat, і ви побачите, що Tomcat доступний через HTTPS

    Чудово!

    Стандартний порт HTTPS

    Чому?

    Зверніть увагу, що на скріншоті вище я отримую доступ до Tomcat через порт 8080, використовуючи https. Це не стандартна практика, і є декілька причин, чому це не є ідеальним варіантом:

    • Ви не хочете, щоб користувачі використовували нестандартний порт
    • Браузер може видавати попередження, оскільки сертифікат видано на доменне ім’я без номера порту

    Тому, метою є змусити Tomcat прослуховувати порт 443, щоб він був доступний через https:// без вказання номера порту.

    Для цього, відредагуйте файл server.xml за допомогою будь-якого текстового редактора:

    • Знайдіть секцію
    • Змініть порт з 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-адресу для початку тестування

    І це ЗЕЛЕНИЙ рейтинг – A.

    Однак, рекомендується прокрутити звіт вниз та перевірити, чи не знайдеться вразливостей, і виправити їх.

    На цьому все на сьогодні.

    Сподіваюся, ця інформація допоможе вам зрозуміти процедуру захисту Tomcat за допомогою сертифіката SSL/TLS. Якщо ви зацікавлені в отриманні додаткових знань, я настійно рекомендую вам цей курс.