Автоматическое обновление 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.conf
  • docs.cdto.life.conf
  • school.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

  1. Проверьте логи:
    bash lxc exec BBB-CONT22-1 -- journalctl -u certbot.service -n 50

  2. Запустите обновление вручную:
    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

  1. Проверьте логи:
    bash lxc exec BBB-CONT22-1 -- tail -f /var/log/certbot-haproxy-update.log

  2. Запустите скрипт вручную:
    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

  1. Проверьте права на bundle:
    bash lxc exec BBB-CONT22-1 -- ls -la /etc/haproxy/certbundle.pem

  2. Перезагрузите HAProxy вручную:
    bash lxc exec BBB-CONT22-1 -- systemctl reload haproxy

Следующие шаги

  1. ✅ Автоматическое обновление настроено
  2. ✅ Настроить мониторинг истечения сертификатов
  3. ✅ Настроить уведомления при ошибках обновления

Статус: ✅ Автоматическое обновление SSL сертификатов настроено и работает корректно.