Автоматическое обновление SSL сертификатов
Дата: 2026-01-08
Статус: ✅ Настроено и работает
Обзор
Все SSL сертификаты для доменов denkart.cdto.life, docs.cdto.life и school.cdto.life автоматически обновляются через Certbot дважды в день (00:00 и 12:00 UTC). После обновления сертификатов автоматически обновляется HAProxy bundle (/etc/haproxy/certbundle.pem) и перезагружается HAProxy.
Установленные сертификаты
| Домен | Срок действия | Путь к сертификату |
|---|---|---|
denkart.cdto.life |
89 дней (до 2026-04-08) | /etc/letsencrypt/live/denkart.cdto.life/ |
docs.cdto.life |
89 дней (до 2026-04-08) | /etc/letsencrypt/live/docs.cdto.life/ |
school.cdto.life |
77 дней (до 2026-03-27) | /etc/letsencrypt/live/school.cdto.life/ |
Компоненты автоматического обновления
1. Certbot Timer
Systemd timer, который запускается дважды в день:
# Проверка статуса timer
lxc exec BBB-CONT22-1 -- systemctl status certbot.timer
# Просмотр конфигурации timer
lxc exec BBB-CONT22-1 -- systemctl cat certbot.timer
Конфигурация:
- Запуск: дважды в день в 00:00 и 12:00 UTC
- Случайная задержка: до 12 часов
- Постоянный: да
2. Certbot Service
Systemd service, который выполняет обновление сертификатов:
# Проверка статуса service
lxc exec BBB-CONT22-1 -- systemctl status certbot.service
# Просмотр конфигурации service
lxc exec BBB-CONT22-1 -- systemctl cat certbot.service
Команда обновления:
/usr/bin/certbot -q renew
3. Deploy Hook
Скрипт, который автоматически вызывается после успешного обновления сертификатов:
Файл: /usr/local/bin/certbot-renewal-hook.sh
Действия:
1. Обновляет HAProxy bundle (/etc/haproxy/certbundle.pem)
2. Перезагружает HAProxy
Логирование: /var/log/certbot-haproxy-update.log
4. Скрипт обновления HAProxy Bundle
Скрипт для объединения всех сертификатов в один bundle:
Файл: /usr/local/bin/update-haproxy-ssl-cert.sh
Действия:
1. Проверяет существующие сертификаты
2. Создает резервную копию bundle
3. Объединяет все сертификаты в новый bundle
4. Устанавливает права доступа
5. Проверяет конфигурацию HAProxy
Конфигурация Certbot
Файлы конфигурации renewal
Для каждого домена существует файл конфигурации в /etc/letsencrypt/renewal/:
denkart.cdto.life.confdocs.cdto.life.confschool.cdto.life.conf
Deploy hook настроен в каждом файле:
[renewalparams]
deploy_hook = /usr/local/bin/certbot-renewal-hook.sh
HAProxy Bundle
Расположение
/etc/haproxy/certbundle.pem
Содержимое
Bundle содержит все три сертификата:
- denkart.cdto.life
- docs.cdto.life
- school.cdto.life
Обновление
Bundle автоматически обновляется после каждого обновления Certbot через deploy hook.
Проверка работы
1. Проверка статуса сертификатов
lxc exec BBB-CONT22-1 -- certbot certificates
2. Тестирование обновления (dry-run)
lxc exec BBB-CONT22-1 -- certbot renew --dry-run
3. Проверка HAProxy bundle
# Проверка содержимого bundle
lxc exec BBB-CONT22-1 -- openssl crl2pkcs7 -nocrl -certfile /etc/haproxy/certbundle.pem | \
openssl pkcs7 -print_certs -text -noout | grep "Subject: CN="
4. Проверка логов обновления
# Логи Certbot
lxc exec BBB-CONT22-1 -- tail -f /var/log/letsencrypt/letsencrypt.log
# Логи обновления HAProxy
lxc exec BBB-CONT22-1 -- tail -f /var/log/certbot-haproxy-update.log
5. Проверка работы HTTPS
# Проверка всех доменов
for domain in denkart.cdto.life docs.cdto.life school.cdto.life; do
echo "Проверка $domain..."
curl -I -k https://$domain
done
Ручное обновление
Если необходимо обновить сертификаты вручную:
# Обновление всех сертификатов
lxc exec BBB-CONT22-1 -- certbot renew
# Обновление конкретного домена
lxc exec BBB-CONT22-1 -- certbot renew --cert-name denkart.cdto.life
# Обновление HAProxy bundle вручную
lxc exec BBB-CONT22-1 -- sudo /usr/local/bin/update-haproxy-ssl-cert.sh
lxc exec BBB-CONT22-1 -- systemctl reload haproxy
Мониторинг
Проверка сроков действия сертификатов
# Проверка всех сертификатов
lxc exec BBB-CONT22-1 -- certbot certificates | grep "Expiry Date"
# Проверка конкретного сертификата
lxc exec BBB-CONT22-1 -- openssl x509 -in /etc/letsencrypt/live/denkart.cdto.life/cert.pem -noout -dates
Настройка мониторинга истечения сертификатов
✅ Настроено автоматическое мониторирование истечения сертификатов
Система автоматически проверяет сроки действия SSL сертификатов и предупреждает об истечении.
Скрипт мониторинга
Файл: /usr/local/bin/check-ssl-certificates.sh
Функции:
- Проверяет сроки действия всех SSL сертификатов
- Предупреждает об истечении за 30, 14 и 7 дней
- Записывает алерты в /var/log/ssl-certificate-alerts.log
- Логирует все проверки в /var/log/ssl-certificate-monitor.log
Пороги предупреждений:
- ⚠️ Предупреждение: за 30 дней до истечения
- 🔴 Критическое: за 14 дней до истечения
- 🚨 Аварийное: за 7 дней до истечения или истекший сертификат
Systemd Timer:
- Расписание: Ежедневно в 06:00 UTC (с случайной задержкой до 1 часа)
- Service: ssl-certificate-monitor.service
- Timer: ssl-certificate-monitor.timer
Проверка статуса:
# Статус timer
lxc exec BBB-CONT22-1 -- systemctl status ssl-certificate-monitor.timer
# Просмотр последних логов
lxc exec BBB-CONT22-1 -- tail -f /var/log/ssl-certificate-monitor.log
# Просмотр алертов
lxc exec BBB-CONT22-1 -- tail -f /var/log/ssl-certificate-alerts.log
# Ручной запуск проверки
lxc exec BBB-CONT22-1 -- sudo /usr/local/bin/check-ssl-certificates.sh
Мониторинг ошибок обновления Certbot
✅ Настроено автоматическое мониторирование ошибок обновления
Система автоматически проверяет логи Certbot и HAProxy на наличие ошибок обновления.
Файл: /usr/local/bin/check-certbot-errors.sh
Функции:
- Проверяет логи Certbot на наличие ошибок за последние 24 часа
- Проверяет логи обновления HAProxy bundle
- Проверяет статус Certbot timer
- Записывает алерты в /var/log/certbot-error-alerts.log
- Логирует все проверки в /var/log/certbot-error-monitor.log
Systemd Timer:
- Расписание: Дважды в день в 06:00 и 18:00 UTC (после обновления Certbot)
- Service: certbot-error-monitor.service
- Timer: certbot-error-monitor.timer
Проверка статуса:
# Статус timer
lxc exec BBB-CONT22-1 -- systemctl status certbot-error-monitor.timer
# Просмотр последних логов
lxc exec BBB-CONT22-1 -- tail -f /var/log/certbot-error-monitor.log
# Просмотр алертов
lxc exec BBB-CONT22-1 -- tail -f /var/log/certbot-error-alerts.log
# Ручной запуск проверки
lxc exec BBB-CONT22-1 -- sudo /usr/local/bin/check-certbot-errors.sh
Проверка всех таймеров:
# Список всех таймеров мониторинга
lxc exec BBB-CONT22-1 -- systemctl list-timers | grep -E "ssl-cert|certbot"
Устранение неполадок
Проблема: Certbot не обновляет сертификаты
Решение:
1. Проверьте статус timer:
bash
lxc exec BBB-CONT22-1 -- systemctl status certbot.timer
-
Проверьте логи:
bash lxc exec BBB-CONT22-1 -- journalctl -u certbot.service -n 50 -
Запустите обновление вручную:
bash lxc exec BBB-CONT22-1 -- certbot renew --force-renewal
Проблема: HAProxy bundle не обновляется
Решение:
1. Проверьте, настроен ли deploy hook:
bash
lxc exec BBB-CONT22-1 -- grep deploy_hook /etc/letsencrypt/renewal/*.conf
-
Проверьте логи:
bash lxc exec BBB-CONT22-1 -- tail -f /var/log/certbot-haproxy-update.log -
Запустите скрипт вручную:
bash lxc exec BBB-CONT22-1 -- sudo /usr/local/bin/update-haproxy-ssl-cert.sh
Проблема: HAProxy не перезагружается
Решение:
1. Проверьте конфигурацию HAProxy:
bash
lxc exec BBB-CONT22-1 -- haproxy -c -f /etc/haproxy/haproxy.cfg
-
Проверьте права на bundle:
bash lxc exec BBB-CONT22-1 -- ls -la /etc/haproxy/certbundle.pem -
Перезагрузите HAProxy вручную:
bash lxc exec BBB-CONT22-1 -- systemctl reload haproxy
Следующие шаги
- ✅ Автоматическое обновление настроено
- ✅ Настроить мониторинг истечения сертификатов
- ✅ Настроить уведомления при ошибках обновления
Статус: ✅ Автоматическое обновление SSL сертификатов настроено и работает корректно.