Истечение SSL-сертификата — одна из самых досадных причин простоя сайта. Браузеры блокируют доступ к ресурсам с просроченным сертификатом, пользователи видят предупреждение безопасности, а поисковые системы могут понизить сайт в выдаче. При этом проблема решается за 15 минут — если вы о ней знаете. В этой статье разберём, как выстроить надёжный мониторинг SSL и никогда не пропустить момент обновления.
Почему сертификаты истекают
SSL-сертификаты имеют ограниченный срок действия. С 2020 года браузеры и центры сертификации (CA) не доверяют сертификатам сроком более 398 дней. Let's Encrypt выдаёт сертификаты на 90 дней. Это осознанное ограничение: короткий срок снижает риски при компрометации ключа и стимулирует автоматизацию обновления.
Типичные сценарии сбоя
| Сценарий | Причина | Последствия |
|---|---|---|
| Забыли обновить | Ручное управление, нет напоминаний | Сайт недоступен до ручного обновления |
| Certbot не сработал | Cron отключён, ошибка в скрипте | Сертификат истекает незаметно |
| Wildcard на нескольких доменах | Один домен обновлён, другие — нет | Частичный простой |
| CDN или прокси | Сертификат на edge устарел | Ошибки при доступе через CDN |
Стратегии мониторинга
Ручная проверка: недостаточно
Периодическая проверка через браузер или openssl не масштабируется. При десяти и более доменах легко пропустить один. Ручной подход допустим только для 1–2 критичных доменов.
Автоматический мониторинг: минимум
Рекомендуемый минимум — автоматическая проверка срока действия с уведомлением за 30, 14 и 7 дней до истечения. Это даёт запас времени на обновление даже при сбое автоматики.
Полный цикл: проверка + обновление
Идеальная схема: мониторинг предупреждает о приближении истечения, а автоматическое обновление (Certbot, acme.sh) продлевает сертификат. Мониторинг страхует на случай сбоя автоматики.
Инструменты для проверки SSL
OpenSSL из командной строки
Быстрая проверка срока действия одного домена:
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
Вывод:
notBefore=Jan 1 00:00:00 2026 GMT
notAfter=Mar 31 23:59:59 2026 GMT
Скрипт для нескольких доменов
#!/bin/bash
DOMAINS=("example.com" "www.example.com" "api.example.com")
DAYS_WARNING=14
for domain in "${DOMAINS[@]}"; do
expiry=$(echo | openssl s_client -servername "$domain" -connect "$domain":443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ -n "$expiry" ]; then
expiry_epoch=$(date -d "$expiry" +%s 2>/dev/null || date -j -f "%b %d %T %Y GMT" "$expiry" +%s)
now_epoch=$(date +%s)
days_left=$(( (expiry_epoch - now_epoch) / 86400 ))
if [ "$days_left" -lt "$DAYS_WARNING" ]; then
echo "ВНИМАНИЕ: $domain истекает через $days_left дней"
fi
fi
done
Онлайн-сервисы
Для регулярного мониторинга без собственной инфраструктуры удобны специализированные сервисы. SSL Monitor на reChecker отслеживает срок действия сертификатов и отправляет уведомления заранее — не нужно настраивать cron и скрипты. Разовая проверка доступна через SSL Checker: введите домен и получите полную информацию о сертификате, цепочке доверия и поддерживаемых протоколах.
Интеграция с CI/CD
GitHub Actions
name: SSL Check
on:
schedule:
- cron: '0 9 * * 1' # Каждый понедельник в 9:00
jobs:
ssl-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check SSL expiry
run: |
for domain in example.com www.example.com; do
expiry=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
echo "Сертификат $domain истекает: $expiry"
done
Уведомления в Slack/Telegram
Добавьте в скрипт отправку в мессенджер при срабатывании порога. Пример для Telegram:
TELEGRAM_BOT_TOKEN="your_token"
TELEGRAM_CHAT_ID="your_chat"
MESSAGE="SSL сертификат $domain истекает через $days_left дней"
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
-d text="${MESSAGE}"
Рекомендуемые пороги уведомлений
| Дней до истечения | Действие | Канал |
|---|---|---|
| 30 | Информационное уведомление | |
| 14 | Напоминание, проверить автообновление | Email, мессенджер |
| 7 | Срочное, ручная проверка обязательна | Все каналы |
| 3 | Критическое, немедленные действия | Все каналы + эскалация |
Автоматическое обновление с Certbot
Для Let's Encrypt настройте автоматическое обновление:
# Установка (Ubuntu/Debian)
sudo apt install certbot python3-certbot-nginx
# Получение сертификата
sudo certbot --nginx -d example.com -d www.example.com
# Certbot автоматически добавляет cron/systemd timer
# Проверка: certbot renew --dry-run
Убедитесь, что certbot renew выполняется минимум раз в 60 дней (сертификаты Let's Encrypt можно обновлять за 30 дней до истечения).
Мониторинг CDN и прокси
Если сайт отдаётся через Cloudflare, Fastly, AWS CloudFront или другой CDN, сертификат может находиться в нескольких местах:
- Оригинал на origin-сервере — ваш веб-сервер
- Edge-сертификат на CDN — выдаётся CDN-провайдером или загружается вами
Проверяйте оба. CDN может показывать пользователю свой сертификат, а origin — свой. Истечение edge-сертификата приведёт к ошибке для всех посетителей, даже если origin в порядке.
Cloudflare
Cloudflare по умолчанию использует Universal SSL (бесплатный сертификат на своих ключах). Срок действия управляется Cloudflare, но при использовании Full (Strict) или загрузке собственного сертификата — следите за датой истечения в панели SSL/TLS.
Собственный сертификат на CDN
При загрузке своего сертификата на edge настройте мониторинг отдельно. Добавьте домен CDN (например, cdn.example.com) в список проверяемых в SSL Monitor или в свой скрипт.
Мониторинг поддоменов и Wildcard
Wildcard-сертификат (*.example.com) защищает все поддомены одним сертификатом. Плюс: один сертификат для www, api, blog, shop. Минус: истечение затрагивает все поддомены сразу.
При мониторинге проверяйте основной домен — для Wildcard этого достаточно. Если используете отдельные сертификаты на поддоменах (например, api.example.com с отдельным сертификатом), добавьте каждый в список мониторинга.
Обработка ложных срабатываний
Иногда мониторинг сообщает об истечении, хотя сертификат обновлён. Причины:
- Кэш DNS — проверка идёт на старый IP. Обновите DNS или подождите TTL.
- Несколько серверов — балансировщик отдаёт запрос на сервер со старым сертификатом. Проверьте синхронизацию сертификатов на всех нодах.
- Разные окружения — staging обновлён, production — нет. Убедитесь, что мониторите production.
При получении уведомления сначала проверьте вручную через SSL Checker — возможно, это ложное срабатывание.
Стоимость мониторинга
| Решение | Стоимость | Ограничения |
|---|---|---|
| Собственный скрипт + cron | Бесплатно | Время на разработку и поддержку |
| GitHub Actions | Бесплатно (лимиты) | До 2000 минут/мес на бесплатном плане |
| UptimeRobot, Pingdom | Бесплатный тариф | Ограниченное число проверок |
| SSL Monitor (reChecker) | 30 ТК/мес | Мониторинг до 10 доменов |
Для малого бизнеса с 1-5 доменами достаточно бесплатных инструментов. Для агентств и компаний с десятками доменов — платный мониторинг окупается экономией времени.
Чек-лист внедрения
- Составьте список всех доменов с HTTPS
- Настройте автоматическую проверку (скрипт, CI или сервис мониторинга)
- Настройте уведомления за 30, 14 и 7 дней
- Для Let's Encrypt — проверьте работу
certbot renew - Добавьте проверку SSL в ежемесячный операционный чек-лист
- Для CDN — добавьте домены edge в мониторинг
- Назначьте ответственного за реакцию на уведомления
Реакция на срабатывание
Когда приходит уведомление об истечении:
- Проверьте вручную — возможно, ложное срабатывание (кэш, другой сервер)
- Для Let's Encrypt — выполните
certbot renewвручную, проверьте логи - Для платных сертификатов — свяжитесь с провайдером, продлите и установите новый
- Перезапустите сервисы — Nginx, Apache после обновления сертификата
- Проверьте доступность — откройте сайт в браузере, проверьте через SSL Checker
- Задокументируйте — что произошло, как решили, как предотвратить в будущем
Имейте письменную инструкцию по действиям при срабатывании. В момент инцидента времени на поиск решений не будет.
Альтернативы Let's Encrypt
Let's Encrypt — не единственный вариант бесплатных сертификатов:
- ZeroSSL — бесплатные DV-сертификаты, совместим с ACME
- Buypass — бесплатные DV-сертификаты на 180 дней
- Платные CA (DigiCert, Sectigo, GlobalSign) — для EV и OV, более длительный срок
Мониторинг нужен для любого типа сертификата. Платные сертификаты обычно на 1–2 года — меньше риск, но забыть про обновление всё равно можно.
Резюме: минимальный набор действий
- Список всех HTTPS-доменов (включая CDN, поддомены)
- Автоматическая проверка раз в неделю (скрипт, CI или SSL Monitor)
- Уведомления за 30, 14, 7 дней до истечения
- Для Let's Encrypt — проверенный
certbot renew(cron или systemd) - Инструкция по действиям при срабатывании
- Ответственный за реакцию
Дополнительные проверки
Помимо срока действия, стоит отслеживать:
- Цепочка сертификатов — все промежуточные сертификаты должны быть валидны
- Алгоритм подписи — SHA-1 устарел, используйте SHA-256
- Протоколы — отключите SSLv3, TLS 1.0, TLS 1.1
Полная проверка доступна через SSL Checker: введите домен и получите развёрнутый отчёт по всем параметрам сертификата и настройкам сервера.
Итоговая памятка
- Автоматический мониторинг обязателен при 3+ доменах
- Уведомления за 30, 14, 7 дней до истечения
- Для Let's Encrypt — проверьте certbot renew
- CDN и поддомены — в отдельном мониторинге
- Имейте инструкцию по действиям при срабатывании
Настройка мониторинга занимает 1-2 часа. Регулярная проверка — минуты в неделю. Простой из-за просроченного сертификата — часы простоя и репутационные потери. Соотношение затрат и рисков очевидно.
Мониторинг SSL не требует больших затрат, но критически важен для стабильности. Потратьте час на настройку — и вы исключите один из самых неприятных сценариев простоя.