В этом руководстве вы узнаете, как установить 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 (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). Определите свой формат и следуйте соответствующим инструкциям.
Шаг 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 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


