Загрузка...
Загрузка...
Практическое руководство по мониторингу SSL-сертификатов. Автоматические уведомления, настройка проверок, интеграция с CI/CD. Как избежать простоя сайта из-за просроченного сертификата.
Всё о SSL/TLS сертификатах: типы, получение, настройка, обновление. Let's Encrypt, Wildcard, EV-сертификаты. Практическое руководство для веб-разработчиков.
DevOpsПолная настройка SSL/TLS в Nginx: установка Certbot, server block, HSTS, OCSP stapling, cipher suites, редирект HTTP на HTTPS.
БезопасностьСравнение типов SSL-сертификатов: DV, OV, EV, Wildcard, Multi-Domain. Как выбрать подходящий сертификат для вашего проекта. Стоимость, сроки выдачи, особенности.
БезопасностьПодробное руководство по типичным ошибкам SSL: ERR_CERT_AUTHORITY_INVALID, mixed content, истёкший сертификат, проблемы цепочки. Диагностика и исправление для веб-мастеров.
Поделитесь с коллегами или изучите другие материалы блога
Истечение 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) продлевает сертификат. Мониторинг страхует на случай сбоя автоматики.
Быстрая проверка срока действия одного домена:
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: введите домен и получите полную информацию о сертификате, цепочке доверия и поддерживаемых протоколах.
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
Добавьте в скрипт отправку в мессенджер при срабатывании порога. Пример для 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 | Критическое, немедленные действия | Все каналы + эскалация |
Для 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 дней до истечения).
Если сайт отдаётся через Cloudflare, Fastly, AWS CloudFront или другой CDN, сертификат может находиться в нескольких местах:
Проверяйте оба. CDN может показывать пользователю свой сертификат, а origin — свой. Истечение edge-сертификата приведёт к ошибке для всех посетителей, даже если origin в порядке.
Cloudflare по умолчанию использует Universal SSL (бесплатный сертификат на своих ключах). Срок действия управляется Cloudflare, но при использовании Full (Strict) или загрузке собственного сертификата — следите за датой истечения в панели SSL/TLS.
При загрузке своего сертификата на edge настройте мониторинг отдельно. Добавьте домен CDN (например, cdn.example.com) в список проверяемых в SSL Monitor или в свой скрипт.
Wildcard-сертификат (*.example.com) защищает все поддомены одним сертификатом. Плюс: один сертификат для www, api, blog, shop. Минус: истечение затрагивает все поддомены сразу.
При мониторинге проверяйте основной домен — для Wildcard этого достаточно. Если используете отдельные сертификаты на поддоменах (например, api.example.com с отдельным сертификатом), добавьте каждый в список мониторинга.
Иногда мониторинг сообщает об истечении, хотя сертификат обновлён. Причины:
При получении уведомления сначала проверьте вручную через SSL Checker — возможно, это ложное срабатывание.
| Решение | Стоимость | Ограничения |
|---|---|---|
| Собственный скрипт + cron | Бесплатно | Время на разработку и поддержку |
| GitHub Actions | Бесплатно (лимиты) | До 2000 минут/мес на бесплатном плане |
| UptimeRobot, Pingdom | Бесплатный тариф | Ограниченное число проверок |
| SSL Monitor (reChecker) | 30 ТК/мес | Мониторинг до 10 доменов |
Для малого бизнеса с 1-5 доменами достаточно бесплатных инструментов. Для агентств и компаний с десятками доменов — платный мониторинг окупается экономией времени.
certbot renewКогда приходит уведомление об истечении:
certbot renew вручную, проверьте логиИмейте письменную инструкцию по действиям при срабатывании. В момент инцидента времени на поиск решений не будет.
Let's Encrypt — не единственный вариант бесплатных сертификатов:
Мониторинг нужен для любого типа сертификата. Платные сертификаты обычно на 1–2 года — меньше риск, но забыть про обновление всё равно можно.
certbot renew (cron или systemd)Помимо срока действия, стоит отслеживать:
Полная проверка доступна через SSL Checker: введите домен и получите развёрнутый отчёт по всем параметрам сертификата и настройкам сервера.
Настройка мониторинга занимает 1-2 часа. Регулярная проверка — минуты в неделю. Простой из-за просроченного сертификата — часы простоя и репутационные потери. Соотношение затрат и рисков очевидно.
Мониторинг SSL не требует больших затрат, но критически важен для стабильности. Потратьте час на настройку — и вы исключите один из самых неприятных сценариев простоя.