bg-tutorials

Как установить SSL-сертификат на Apache

В этом руководстве вы узнаете, как установить SSL-сертификат на Apache, шаг за шагом. Инструкции применимы к Apache 2.4, текущей стабильной ветке.

Содержание

Как сгенерировать код CSR на Apache?

Запрос на подпись сертификата, или просто CSR, — это небольшой текстовый файл, содержащий информацию о владении доменом и/или компании. Генерация CSR является неотъемлемой частью процесса покупки SSL, и все коммерческие удостоверяющие центры (CA) требуют от заявителей на SSL выполнения этого шага.

У вас есть два варианта:

Установка SSL-сертификата на Apache

После того как удостоверяющий центр подпишет и отправит вам SSL-сертификат, вы можете безопасно установить его на свой сервер Apache. Следуйте приведённым ниже шагам.

Шаг 1: Подготовьте файлы сертификата

Скачайте и извлеките файлы из ZIP-папки, полученной от вашего удостоверяющего центра. Обычно вы найдёте:

  • Файл .crt — ваш основной SSL-сертификат.
  • Файл .ca-bundle — промежуточные (и корневой) сертификаты, образующие цепочку доверия. Эта цепочка необходима, чтобы браузеры и приложения могли проверить ваш сертификат. Без неё некоторые клиенты могут пометить ваш сайт как небезопасный.

Загрузите эти файлы вместе с приватным ключом (.key), сгенерированным вместе с CSR, в защищённую директорию на вашем сервере, например /etc/ssl/. Убедитесь, что приватный ключ доступен для чтения только root (chmod 600).

Рекомендуется (Apache 2.4.8 и новее): объедините ваш сертификат и пакет CA в один файл «полной цепочки». Начиная с Apache 2.4.8, директива SSLCertificateFile загружает промежуточные сертификаты непосредственно из этого файла, поэтому старая директива SSLCertificateChainFile больше не нужна:

cat your_domain.crt your_domain.ca-bundle > your_domain_fullchain.crt

Если ваш CA предоставил промежуточные сертификаты в виде отдельных файлов, объедините их сначала с вашим сертификатом, а затем добавьте промежуточные сертификаты в порядке от того, что подписал ваш сертификат, до корневого (сам корневой сертификат необязателен):

cat your_domain.crt intermediate.crt root.crt > your_domain_fullchain.crt

Например, при установке сертификата Sectigo PositiveSSL вы объедините сертификат вашего домена с промежуточным пакетом Sectigo. Всегда используйте точные имена файлов, предоставленные вашим CA.

Шаг 2: Включите модуль SSL (mod_ssl)

Прежде чем настраивать HTTPS, убедитесь, что модуль SSL в Apache включён.

На Debian/Ubuntu включите mod_sslmod_headers, который понадобится для заголовка HSTS на шаге 4):

sudo a2enmod ssl
sudo a2enmod headers

На RHEL/CentOS/AlmaLinux/Rocky Linux установите пакет модуля SSL (модуль загружается автоматически после установки):

sudo dnf install mod_ssl

Шаг 3: Найдите файл конфигурации Apache

В зависимости от вашей операционной системы и версии Apache конфигурация может находиться в разных файлах. Ищите httpd.conf, apache2.conf или отдельный файл конфигурации SSL/сайта в одном из следующих мест:

  • Debian/Ubuntu: основная конфигурация /etc/apache2/apache2.conf; конфигурации отдельных сайтов в /etc/apache2/sites-available/.
  • RHEL/CentOS/AlmaLinux/Rocky: основная конфигурация /etc/httpd/conf/httpd.conf; конфигурация SSL /etc/httpd/conf.d/ssl.conf.

Примечание: Если ваш сервер Apache работает на Ubuntu, вы также можете следовать нашему специальному руководству по установке SSL для Ubuntu.

Шаг 4: Настройте виртуальный хост

Сначала создайте резервную копию текущего файла конфигурации. Так, если что-то пойдёт не так, вы сможете быстро откатить изменения:

sudo cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.backup

Теперь откройте файл конфигурации и настройте виртуальный хост HTTPS (порт 443). Полный, современный виртуальный хост выглядит так:

<VirtualHost *:443>
    ServerName  www.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/example

    SSLEngine on

    # Apache 2.4.8+ : сертификат сервера + промежуточная цепочка в ОДНОМ файле
    SSLCertificateFile    /etc/ssl/example_com_fullchain.crt
    SSLCertificateKeyFile /etc/ssl/example_com.key

    # Рекомендуемое усиление TLS (2026)
    SSLProtocol         -all +TLSv1.2 +TLSv1.3
    SSLHonorCipherOrder off

    # Указывает браузерам всегда использовать HTTPS. Уберите ведущий #, чтобы включить HSTS,
    # но только после того, как вы убедитесь, что HTTPS работает корректно:
    # Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    ErrorLog  ${APACHE_LOG_DIR}/example_error.log
    CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>

Замените example.com, корневую директорию документов и пути к файлам на свои значения. Вот что делают ключевые директивы:

  • SSLEngine on — включает SSL/TLS для этого виртуального хоста.
  • SSLCertificateFile — путь к вашему файлу полной цепочки (сертификат + промежуточные), созданному на шаге 1. В Apache 2.4.8+ эта единственная директива заменяет устаревшую SSLCertificateChainFile.
  • SSLCertificateKeyFile — путь к вашему приватному ключу, сгенерированному вместе с CSR.
  • SSLProtocol -all +TLSv1.2 +TLSv1.3 — отключает старые, небезопасные протоколы SSL/TLS и разрешает только TLS 1.2 и TLS 1.3.
  • Strict-Transport-Security (HSTS) — предписывает браузерам подключаться только по HTTPS. Требует mod_headers (включён на шаге 2). Включайте только после того, как убедитесь, что HTTPS работает корректно.

Убедитесь, что ни одна из этих строк не начинается с # (что закомментировало бы их). На Debian/Ubuntu ${APACHE_LOG_DIR} соответствует /var/log/apache2; на системах на базе RHEL используйте вместо этого /var/log/httpd/.

Устаревшие серверы: Если у вас версия Apache старше 2.4.8, храните сертификат и цепочку в отдельных файлах и добавьте устаревшую директиву SSLCertificateChainFile /etc/ssl/example_com.ca-bundle после SSLCertificateFile. На любом современном сервере предпочтителен подход с полной цепочкой, описанный выше.

Дополнительное усиление (опционально): для более сильного набора шифров и OCSP-скрепления сгенерируйте индивидуальную конфигурацию с помощью генератора конфигурации SSL от Mozilla. OCSP-скрепление также требует директивы SSLStaplingCache в глобальной конфигурации Apache.

Включите сайт: На Debian/Ubuntu виртуальный хост, размещённый в /etc/apache2/sites-available/, не загружается, пока вы его не включите. Если вы сохранили эту конфигурацию как новый файл (например, example-ssl.conf), активируйте его командой:

sudo a2ensite example-ssl.conf

Вы можете вместо этого отредактировать поставляемый по умолчанию default-ssl.conf, но его также нужно включить командой a2ensite default-ssl. На RHEL/CentOS/AlmaLinux/Rocky файлы в /etc/httpd/conf.d/ загружаются автоматически — но учтите, что ssl.conf уже содержит блок <VirtualHost _default_:443> по умолчанию с самоподписанным сертификатом, поэтому либо отредактируйте этот блок, либо добавьте свой виртуальный хост в отдельный файл, например /etc/httpd/conf.d/yourdomain.conf, чтобы избежать двух пересекающихся хостов на порту 443.

Шаг 5: Перенаправление с HTTP на HTTPS

Чтобы посетители всегда попадали на защищённую версию вашего сайта, добавьте второй виртуальный хост на порту 80, который постоянно перенаправляет весь HTTP-трафик на HTTPS:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost>

Шаг 6: Проверьте конфигурацию и перезапустите Apache

Всегда проверяйте конфигурацию перед перезапуском. Синтаксическая ошибка может привести к отключению вашего сайта, поэтому выполните:

sudo apachectl configtest

Если всё правильно, вы увидите:

Syntax OK

Теперь примените изменения, перезагрузив Apache (перезагрузка активирует новую конфигурацию, не разрывая существующие соединения):

sudo systemctl reload apache2     # Debian/Ubuntu
sudo systemctl reload httpd       # RHEL/CentOS/AlmaLinux/Rocky

Если перезагрузки недостаточно, перезапустите службу (sudo systemctl restart apache2 или httpd). На старых системах без systemd используйте sudo apachectl graceful.

Если установка прошла успешно, поздравляем! Ваш веб-сайт теперь защищён SSL/TLS.

Проверка установки SSL

После установки SSL-сертификата на Apache проверьте, что всё работает как ожидается. Мгновенное сканирование выявит любые ошибки или уязвимости, которые могут повлиять на работу вашего сертификата. Используйте наш инструмент SSL Checker, чтобы проверить статус установки.

Вы также можете подтвердить сертификат и его цепочку непосредственно из командной строки:

openssl s_client -connect www.example.com:443 -servername www.example.com

Где купить SSL-сертификат для Apache?

Лучшее место для приобретения SSL-сертификата для Apache — SSL Dragon. Мы предлагаем непревзойдённые цены и скидки на весь наш ассортимент SSL-продуктов и тщательно отобрали лучшие SSL-бренды на рынке, чтобы обеспечить ваш сайт надёжной защитой. Все наши SSL-сертификаты совместимы с Apache. Получите SSL-сертификат прямо сейчас!

Учтите, что срок действия SSL/TLS-сертификатов сокращается: максимальный срок действия снизится до 200 дней в марте 2026 года, до 100 дней в 2027 году и всего до 47 дней к 2029 году. Более короткие циклы означают более частое продление, поэтому стоит заранее спланировать процесс продления (и его автоматизацию).

Часто задаваемые вопросы

Что такое SSL в Apache?

SSL (Secure Sockets Layer), которому на смену пришёл TLS (Transport Layer Security), — это криптографический протокол, шифрующий связь между двумя сетевыми узлами, например веб-сервером, таким как Apache, и браузером пользователя.

Как узнать, включён ли SSL в Apache?

На дистрибутивах Debian и Ubuntu найдите в конфигурации директиву протокола SSL:

grep -ir SSLProtocol /etc/apache2/

Если SSL настроен, вы увидите вывод, похожий на:

/etc/apache2/mods-available/ssl.conf:SSLProtocol +TLSv1.2 +TLSv1.3

Вы также можете убедиться, что модуль SSL загружен в работающий сервер:

apachectl -M | grep ssl

Где находится файл SSL .conf в Apache?

Файл конфигурации может находиться в разных местах в зависимости от вашей ОС и настроек. На Debian/Ubuntu проверьте /etc/apache2/apache2.conf и файлы отдельных сайтов в /etc/apache2/sites-available/. На RHEL/CentOS/AlmaLinux/Rocky проверьте /etc/httpd/conf/httpd.conf и /etc/httpd/conf.d/ssl.conf.

В чём разница между SSLCertificateFile и SSLCertificateChainFile?

SSLCertificateFile указывает на сертификат вашего сервера. Начиная с Apache 2.4.8, тот же файл может также содержать промежуточные сертификаты, тем самым предоставляя полную цепочку. SSLCertificateChainFile был старым способом предоставления этих промежуточных сертификатов отдельно, но он устарел начиная с Apache 2.4.8. На любом современном сервере разместите сертификат и промежуточные сертификаты в одном файле и укажите его только с помощью SSLCertificateFile.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете
Написано

Опытный автор контента, специализирующийся на SSL-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.