Let's Encrypt для Apache представляет собой отдельный системный пакет python-certbot-apache устанавливаемый из репозитория.
Let's Encrypt предлагает бесплатные SSL сертификаты сроком действия в 3 месяца, они могут быть установлены на любой веб-сервер или использоваться, например, для шифрования почты.
Такие сертификаты принимаются всеми браузерами, но по причине ограниченного периода действия требуют частого продления, которое можно автоматизировать. В случае с Apache2 такая автоматизация выполняется особенно просто.
Установка и настройка 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
Пример вывода при успешной проверке:
Вывод в консоль должен состоять из 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 можно проверить добавилось ли задание:
При таком задании сертификат будет обновляться автоматически раз в неделю по понедельникам в 1:20.
Первая часть команды в crontab — обновление сертификата, вторая — перечитывание конфигуации веб-сервера. За счет двойного & вторая часть команды будет выполняться только если успешно выполнится первая.
Фактически операция не всегда будет проходить, в первые 2 месяца certbot будет возвращать сообщение что продление не требуется. Как только станет доступно обновление сертификат будет обновлен.
В crontab последней обязательно должна быть добавлена пустая строка.
Читайте также про работу с CRON и про установку сертификата letsencrypt на сервер с Nginx