Настройка SSL-сертификата Let’s Encrypt с использованием Certbot и Apache
В данной статье мы рассмотрим пошаговый процесс получения, установки и автоматического обновления SSL-сертификата для домена с использованием Certbot и веб-сервера Apache.
Для выпуска сертификата необходим установленный и настроенный Apache с корректными виртуальным хостом и DNS-записями. На примере ниже будем рассматривать выпуск сертификата для домена — example.com
.
Подготовка к выпуску сертификата
Устанавливаем Certbot:
apt-get install certbot -y
Создаем директорию /var/www/letsencrypt
, которая будет использоваться для проверки владения доменом и назначаем ей соответствующие права:
mkdir -p /var/www/letsencrypt
chown www-data:www-data /var/www/letsencrypt
Certbot использует протокол ACME для проверки владения доменом. Для этого необходимо настроить доступ к специальной директории .well-known/acme-challenge
. Создаем конфигурацию /etc/apache2/conf-available/letsencrypt.conf
со следующим содержимым:
Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
<Directory "/var/www/letsencrypt/.well-known/acme-challenge/">
Options None
AllowOverride None
ForceType text/plain
Order allow,deny
Allow from all
RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
</Directory>
RedirectMatch 404
разрешает доступ только к файлам, соответствующим шаблону ACME challenge (ровно 43 символа после пути /.well-known/acme-challenge/
), тем самым защищает директорию от несанкционированного доступа к другим файлам.Дополнительно
Если ваш виртуальный хост уже настроен для использования SSL и при обращении к http://example.com
происходит редирект на https://example.com
, то нужно убедиться, что определённые пути, такие как путь для ACME Challenge, не перенаправляются. Это необходимо для успешного прохождения проверки домена.
Чтобы реализовать это, измените или добавьте указанный ниже блок конфигурации в настройки вашего виртуального хоста в Apache:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
# Включаем модуль Rewrite для обработки URL-переписывания
RewriteEngine On
# Условие: если запрос не начинается с "/.well-known/acme-challenge/", то выполняем редирект
RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/
# Правило редиректа всех остальных запросов на HTTPS
RewriteRule ^/(.*)$ https://example.com/$1 [R=301,L]
</VirtualHost>
a2enmod rewrite && systemctl restart apache2
Тестовый запуск Certbot
Перед выпуском реального сертификата рекомендуется выполнить тестовый запуск, чтобы убедиться, что все настроено правильно. Используйте команду:
certbot certonly --dry-run --webroot -w /var/www/letsencrypt -d example.com -d www.example.com
Параметры команды:
--dry-run
: выполняет тестовый запуск без выпуска реального сертификата.--webroot
: указывает метод проверки владения доменом через веб-сервер.-w /var/www/letsencrypt
: указывает путь к директории, где certbot будет размещать файлы проверки.-d example.com -d www.example.com
: список доменов, для которых выпускается сертификат.
Если тест прошел успешно, вы увидите сообщение об успешной проверке. Если возникли ошибки, проверьте:
- Настройки DNS для доменов.
- Доступность директории
/var/www/letsencrypt
. - Конфигурацию Apache.
Выпуск реального сертификата
После успешного тестового запуска можно получить реальный сертификат. Используйте команду:
certbot certonly --agree-tos --email admin@jakondo.ru --webroot -w /var/www/letsencrypt -d example.com -d www.example.com
Дополнительные параметры:
--agree-tos
: автоматически соглашается с условиями использования Let’s Encrypt.--email admin@example.com
: указывает контактный email для уведомлений (например, о необходимости обновления сертификата).
После выполнения команды certbot:
- Создаст файлы проверки в директории
/var/www/letsencrypt/.well-known/acme-challenge/
. - Пройдет проверку владения доменом.
- Сохранит сертификаты в директорию
/etc/letsencrypt/live/example.com/
.
Настройка автоматического обновления сертификата
Сертификаты Let’s Encrypt действительны 90 дней
, поэтому важно настроить их автоматическое обновление.
Настройка хука для обновления
При выпуске сертификата certbot создает файл конфигурации обновления в каталоге /etc/letsencrypt/renewal/
. Чтобы Apache перечитывал конфигурацию после обновления сертификата, добавьте параметр renew_hook
:
[renewalparams]
...
renew_hook = systemctl reload apache2
Этот параметр указывает, что после успешного обновления сертификата будет выполнен перезапуск apache, чтобы применить изменения.
Проверка обновления
Для проверки работоспособности обновления выполните команду:
certbot renew --dry-run
Если тест прошел успешно, certbot автоматически обновит сертификаты при необходимости.
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.