В этом руководстве вы узнаете, как установить SSL-сертификат на Apache Tomcat с помощью утилиты Java keytool, а затем настроить HTTPS-коннектор в файле server.xml. Если вы еще не сгенерировали свой CSR, первый раздел покажет, как это сделать.
Мы также записали видео, которое проведет вас через весь процесс. Вы можете посмотреть видео, прочитать инструкции или сделать и то, и другое. Видео находится ниже.
Генерация CSR-кода для Tomcat
CSR (Certificate Signing Request) — это блок текста, содержащий актуальные данные о вашем домене и организации. Каждый покупатель коммерческого SSL-сертификата обязан отправить CSR в удостоверяющий центр (CA, поставщика SSL), чтобы пройти проверку и получить сертификат. Если CSR содержит неверные данные, CA его не подпишет.
В Tomcat CSR создается с помощью keytool на основе хранилища ключей Java (Java keystore), и это же хранилище содержит закрытый ключ, который вы повторно используете при установке. У вас есть два варианта:
- Использовать наш генератор CSR для автоматического создания CSR.
- Следовать нашему пошаговому руководству по генерации CSR на Tomcat.
Важно: запомните файл хранилища ключей (keystore) и псевдоним (alias), которые вы использовали при генерации CSR. Позже вы импортируете подписанный сертификат обратно именно в этот псевдоним, поскольку именно там находится соответствующий закрытый ключ.
После того как удостоверяющий центр проверит ваш запрос и пришлет файлы SSL, переходите к установке ниже.
Установка SSL-сертификата в Tomcat
Установка в Tomcat состоит из двух этапов: сначала вы импортируете цепочку сертификатов и подписанный сертификат в хранилище ключей, которое уже содержит ваш закрытый ключ, а затем настраиваете HTTPS-коннектор в файле server.xml для использования этого хранилища.
Шаг 1: Подготовьте файлы SSL-сертификата
Удостоверяющий центр отправит файлы на указанный вами адрес электронной почты, обычно в виде ZIP-архива. Распакуйте его. В зависимости от CA файлы могут поступить в одном из двух форматов:
- PKCS#7: единый файл .p7b (или .cer), который уже объединяет ваш сертификат вместе с корневым и промежуточными сертификатами.
- PEM: отдельные файлы, обычно .crt для сертификата сервера, плюс отдельные файлы root.crt и intermediate.crt.
Загрузите извлеченные файлы на сервер, в тот же каталог, где находится хранилище ключей, из которого вы генерировали CSR (далее оно называется example.jks). Определите свой формат и следуйте соответствующим инструкциям.
Генерировали CSR где-то в другом месте, так что ваш закрытый ключ — это отдельный файл, а не запись в example.jks? Пропустите keytool: преобразуйте PEM в PKCS#12, чтобы объединить сертификат, цепочку и ключ в один .p12, а затем указывайте этот файл в шаге 3 с параметром certificateKeystoreType=»PKCS12″.
Шаг 2: Импортируйте сертификат в хранилище ключей
Формат PKCS#7. Поскольку .p7b уже содержит полную цепочку, одна команда импортирует всё сразу, в уже существующий псевдоним закрытого ключа:
keytool -import -trustcacerts -alias ssldragon -keystore example.jks -file example.p7b
Замените ssldragon на свой собственный псевдоним, а example — на имена своих файлов. Псевдоним должен быть тем, который уже содержит ваш закрытый ключ (псевдоним из этапа CSR). Когда вы увидите сообщение Certificate reply was installed in keystore, импорт прошел успешно. Проверьте содержимое хранилища ключей командой:
keytool -list -v -keystore example.jks
Найдите запись с типом PrivateKeyEntry и длиной цепочки сертификатов больше 1. Это подтверждает, что подписанный сертификат теперь привязан к вашему закрытому ключу.
Формат PEM. Импортируйте сертификаты по отдельности, в порядке цепочки: сначала корневой, затем любые промежуточные, и в последнюю очередь — сертификат вашего домена. Импорт цепочки в первую очередь позволяет keytool построить полный путь доверия, прежде чем он привяжет ответ к вашему ключу. Импортируйте корневой сертификат:
keytool -import -trustcacerts -alias root -keystore example.jks -file root.crt
Затем импортируйте промежуточный сертификат:
keytool -import -trustcacerts -alias intermediate -keystore example.jks -file intermediate.crt
Если ваш CA предоставляет несколько промежуточных сертификатов, импортируйте каждый под своим отдельным доверенным псевдонимом, следуя порядку, в котором они подписывают друг друга (от корня вниз к сертификату вашего домена). Например, сертификат Sectigo PositiveSSL поставляется с более чем одним промежуточным сертификатом, поэтому импортируйте их по порядку перед сертификатом домена.
Наконец, импортируйте свой основной сертификат (тот, что выдан для вашего домена) в уже существующий псевдоним закрытого ключа — тот же псевдоним, который вы использовали при генерации CSR:
keytool -import -trustcacerts -alias ssldragon -keystore example.jks -file example.crt
Здесь ssldragon должен быть вашим существующим псевдонимом закрытого ключа. Поскольку этот псевдоним уже содержит ключ, keytool рассматривает этот импорт как ответ с сертификатом (certificate reply) и привязывает подписанный сертификат к ключу. Именно этот шаг заставляет HTTPS работать.
Критическая ошибка: не импортируйте подписанный сертификат под совершенно новым псевдонимом. Если у псевдонима нет существующего закрытого ключа, keytool сохранит сертификат как отдельную доверенную запись без привязанного ключа, и TLS не будет работать. Если вы не уверены, какой псевдоним содержит ваш ключ, выполните команду keytool -list -v -keystore example.jks и используйте псевдоним с типом PrivateKeyEntry.
Шаг 3: Настройте HTTPS-коннектор в server.xml
После того как сертификат находится в хранилище ключей, укажите на него HTTPS-коннектор Tomcat. Коннектор определен в файле server.xml, расположенном в папке conf вашей установки Tomcat (например, $CATALINA_HOME/conf/server.xml). Откройте файл в текстовом редакторе.
В текущих версиях Tomcat (9, 10 и 11) рекомендуемая форма включает вложенный элемент SSLHostConfig, который, в свою очередь, содержит элемент Certificate, ссылающийся на ваше хранилище ключей. Добавьте или обновите защищенный коннектор, чтобы он выглядел так:
<Connector
port="443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true"
scheme="https"
secure="true">
<SSLHostConfig>
<Certificate
certificateKeystoreFile="/your_path/example.jks"
certificateKeystorePassword="your_keystore_password"
certificateKeystoreType="JKS"
certificateKeyAlias="ssldragon"
type="RSA" />
</SSLHostConfig>
</Connector>
- certificateKeystoreFile: полный путь к файлу хранилища ключей.
- certificateKeystorePassword: пароль хранилища ключей.
- certificateKeystoreType: JKS для хранилища .jks или PKCS12 для хранилища .p12 / .pfx.
- certificateKeyAlias: псевдоним, содержащий ваш закрытый ключ и подписанный сертификат (здесь — ssldragon). Это указывает Tomcat, какую запись использовать, если хранилище содержит более одной.
Примечание: порт 443 — это стандартный порт HTTPS, использованный выше; собственные примеры Tomcat по умолчанию используют 8443, поэтому применяйте тот, который требуется вашему окружению. Если это ваша первая настройка HTTPS, защищенный коннектор в server.xml может быть закомментирован. Удалите окружающие маркеры комментариев, чтобы активировать коннектор, и убедитесь, что ни один другой коннектор еще не привязан к тому же порту.
Устаревшая форма (более старые версии Tomcat). В более старых руководствах данные хранилища ключей указываются напрямую в коннекторе через атрибуты keystoreFile и keystorePass. Этот стиль заменен элементами SSLHostConfig и Certificate, показанными выше, — именно эту форму следует использовать в поддерживаемых версиях Tomcat.
Шаг 4: Сохраните server.xml и перезапустите Tomcat
Сохраните server.xml, затем перезапустите Tomcat, чтобы он перезагрузил конфигурацию. В Linux используйте встроенные скрипты:
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
Если Tomcat работает как служба, перезапустите ее через ваш менеджер служб (например, systemctl restart tomcat в Linux или панель служб в Windows). Поздравляем, ваш SSL-сертификат теперь установлен на сервере Tomcat.
Проверка установки SSL в Tomcat
После установки сертификата небольшие ошибки могут остаться незамеченными и повлиять на то, как браузеры обрабатывают ваш сайт. Возьмите за правило проверять установку. Запустите наш SSL Checker для мгновенного сканирования, которое выявляет такие проблемы, как отсутствующий промежуточный сертификат или недоверенная цепочка.
Часто задаваемые вопросы
Обычная причина — импорт подписанного сертификата под новым псевдонимом вместо псевдонима, который уже содержит ваш закрытый ключ. В этом случае keytool сохраняет его как доверенную запись сертификата без ключа, поэтому Tomcat не может завершить TLS-рукопожатие. Повторно импортируйте подписанный ответ в уже существующий псевдоним закрытого ключа (тот, что использовался при CSR). Убедитесь, что это сработало, выполнив команду keytool -list -v -keystore example.jks и проверив, что псевдоним отображается как PrivateKeyEntry с цепочкой длиннее одного сертификата.
Сначала импортируйте цепочку. Добавьте корневой и любые промежуточные сертификаты как доверенные записи, по порядку, а затем импортируйте сертификат вашего домена в псевдоним закрытого ключа в последнюю очередь. Это позволяет keytool построить полный путь доверия, прежде чем он привяжет ответ к вашему ключу. В файле PKCS#7 (.p7b) цепочка уже объединена, поэтому один импорт обрабатывает всё.
HTTPS-коннектор определен в файле server.xml, в каталоге conf вашей установки Tomcat (например, $CATALINA_HOME/conf/server.xml). В текущих версиях Tomcat хранилище ключей указывается через вложенные элементы SSLHostConfig и Certificate, а не напрямую в коннекторе.
Да. Tomcat поддерживает оба варианта. Установите certificateKeystoreType в значение PKCS12 для хранилища .p12 или .pfx, либо в JKS для хранилища .jks, и укажите в certificateKeystoreFile соответствующий файл. PKCS12 — это стандартный, переносимый формат хранилища ключей, поэтому он является хорошим выбором по умолчанию для новых хранилищ.
Примерная конфигурация Tomcat использует порт 8443 для защищенного коннектора. Чтобы обслуживать HTTPS на стандартном порту, который браузеры используют по умолчанию, установите параметр port коннектора в значение 443 и убедитесь, что ни один другой коннектор или служба уже не использует этот порт.
Запустите встроенные скрипты $CATALINA_HOME/bin/shutdown.sh, а затем $CATALINA_HOME/bin/startup.sh, либо перезапустите службу Tomcat через ваш менеджер служб (например, systemctl restart tomcat в Linux или панель служб в Windows). Для вступления изменений server.xml в силу требуется перезапуск.
Сэкономьте 10% на SSL-сертификатах при заказе сегодня!
Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10


