Настройка Let's Encrypt Apache с автопродлением


Let's Encrypt для Apache представляет собой отдельный системный пакет python-certbot-apache устанавливаемый из репозитория.



Let's Encrypt предлагает бесплатные SSL сертификаты сроком действия в 3 месяца, они могут быть установлены на любой веб-сервер или использоваться, например, для шифрования почты.

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



Let's Encrypt Apache


Установка и настройка Let's Encrypt на Apache2


Устанавливать сертификат Let's Encrypt и настраивать автопродление будем на сервере с операционной системой Debian и Apache2 в качестве веб-сервера.

Проще всего ставить Let's Encrypt на Apache при помощи клиента certbot



Обновляем список подключенных репозиториев

apt-get update

Устанавливаем certbot

apt-get install python-certbot-apache



В конфигурационный файл виртуального хоста изменений вносить не требуется. В нем должно указываться ServerName, других требований нет — файл будет взят за основу при создании конфигурационного файла для HTTPS. Файл будет создан автоматически.

Оригинал стоит сохранить на всякий случай прежде чем продолжать.



cat /etc/apache2/sites-available/example.conf

<VirtualHost *:80>
ServerAdmin [email protected]
ServerSignature On

ServerName example.com

ServerAlias www.example.com
AddDefaultCharset utf-8
CustomLog /var/log/apache2/example.com/access.log
LogLevel warn
SuexecUserGroup web web

DocumentRoot '/home/web/example.com/www/'

</VirtualHost>



Копируем файл в каталог /root/ и даем копии имя example.conf_backup

cp /etc/apache2/sites-available/example.conf /root/example.conf_backup



Запускаем генерацию сертификата — возникнет несколько диалогов.

В них потребуется выбрать сайты на сервере, для которых требуется настроить https, а также тип редиректа на безопасное соединение

certbot --apache



После того как процесс завершен проверяем конфигурацию

apache2ctl configtest



Пример вывода при успешной проверке:

apache2ctl configtest


Вывод в консоль должен состоять из Syntax OK, это означает, что ошибок в конфигурационных файлах нет и apache2 можно перезапустить

/etc/init.d/apache2 restart



После перезапуска веб-сервера сайт будет доступен по https



Автопродление SSL сертификата


Чтобы обновлять сертификаты по расписанию нужно добавить задание в CRON

crontab -e

20 1 * * 1 /usr/bin/certbot renew && /etc/init.d/apache2 reload



Через crontab -l можно проверить добавилось ли задание:

Настройка Let's Encrypt Apache с автопродлением


При таком задании сертификат будет обновляться автоматически раз в неделю по понедельникам в 1:20.

Первая часть команды в crontab — обновление сертификата, вторая — перечитывание конфигуации веб-сервера. За счет двойного & вторая часть команды будет выполняться только если успешно выполнится первая.



Фактически операция не всегда будет проходить, в первые 2 месяца certbot будет возвращать сообщение что продление не требуется. Как только станет доступно обновление сертификат будет обновлен.



В crontab последней обязательно должна быть добавлена пустая строка.

Читайте также про работу с CRON и про установку сертификата letsencrypt на сервер с Nginx

Сказать спасибо