Истёкший SSL-сертификат вызывает отображение полноэкранного предупреждения безопасности в браузере, блокируя доступ посетителей к вашему сайту. Вот как проверить, когда истекает ваш сертификат, и настроить мониторинг.
Проверка через браузер
- Перейдите на ваш сайт с
https:// - Нажмите на значок замочка в адресной строке
- Нажмите “Сертификат” или “Безопасное подключение” → “Сертификат действителен”
- Найдите дату “Действителен до” или “Истекает”
Проверка с помощью OpenSSL (командная строка)
Удалённая проверка (с любого компьютера)
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -enddate
Результат: notAfter=Aug 5 12:00:00 2026 GMT
Проверка локального файла
openssl x509 -noout -enddate -in /etc/ssl/gethttps/fullchain.pem
Проверка всех деталей сразу
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates
Проверка с помощью однострочного скрипта
Проверьте, истекает ли сертификат в течение 30 дней:
if openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -checkend 2592000 > /dev/null 2>&1; then
echo "Certificate is valid for at least 30 more days"
else
echo "WARNING: Certificate expires within 30 days!"
fi
Проверка нескольких доменов одновременно
Если вы управляете несколькими доменами, проверьте их все в цикле:
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
echo "$domain — expires: $expiry"
done
Автоматический мониторинг с помощью cron
Создайте ежедневную задачу cron, которая отправляет вам письмо, когда до истечения сертификата осталось менее 30 дней:
#!/bin/bash
# Сохраните как /usr/local/bin/check-ssl-expiry.sh
DOMAINS="example.com www.example.com api.example.com"
WARN_DAYS=30
WARN_SECS=$((WARN_DAYS * 86400))
for domain in $DOMAINS; do
if ! echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | \
openssl x509 -noout -checkend $WARN_SECS > /dev/null 2>&1; then
echo "WARNING: $domain certificate expires within $WARN_DAYS days" | \
mail -s "SSL Expiry Warning: $domain" admin@example.com
fi
done
Добавьте в crontab: 0 9 * * * /usr/local/bin/check-ssl-expiry.sh
Настройка сервисов мониторинга
Для более надёжного подхода используйте сервис мониторинга:
| Метод | Как | Стоимость | Варианты оповещений |
|---|---|---|---|
| Напоминание в календаре | Установите на 60 дней после выпуска | Бесплатно | Вручную |
| Скрипт cron | Запускайте скрипт проверки ежедневно | Бесплатно | |
| UptimeRobot | Добавьте SSL-монитор, установите порог оповещения | Бесплатный тариф | Email, Slack, webhook |
| Better Uptime | SSL-мониторинг с управлением инцидентами | Бесплатный тариф | Email, SMS, Slack |
| Автообновление Certbot | certbot renew через systemd timer | Бесплатно | Полностью предотвращает истечение |
Для 90-дневных сертификатов Let’s Encrypt обновляйте на 60-й день (30 дней запаса).
Какие данные сертификата следует проверять?
Помимо даты истечения, периодически проверяйте:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -text | grep -E 'Subject:|Issuer:|Not After|DNS:'
Это покажет:
- Subject/SAN — сертификат покрывает нужные домены
- Issuer — выдан ожидаемым CA (например, Let’s Encrypt)
- Not After — дата истечения
- DNS names — все доменные имена в поле SAN
Часто задаваемые вопросы
Что происходит, когда сертификат истекает?
Браузеры показывают полноэкранное предупреждение, например «Ваше подключение не является защищённым» (Chrome) или «Внимание: впереди потенциальная угроза безопасности» (Firefox). Большинство посетителей сразу покинут сайт. Поисковые системы также могут понизить рейтинг или исключить ваши страницы из индекса до обновления сертификата.
Как часто нужно проверять?
Если у вас автоматическое обновление (Certbot), проверяйте ежемесячно в качестве подстраховки. Если вы обновляете вручную (GetHTTPS), проверяйте на 50-й день и установите строгое напоминание на 60-й день. С переходом на 47-дневные сертификаты в 2029 году мониторинг станет ещё более важным.
Можно ли проверить срок действия без доступа к командной строке?
Да. Онлайн-инструменты, такие как SSL Labs Server Test и SSL Checker от SSL Shopper, показывают данные сертификата, включая даты истечения — просто введите ваш домен. Инструменты разработчика браузера также показывают эту информацию (значок замочка → Сведения о сертификате).
Что делать, если сертификат уже истёк?
Обновите немедленно. Перейдите на GetHTTPS, чтобы получить новый сертификат, замените файлы на сервере и перезагрузите веб-сервер. Процесс занимает 5 минут. За истечение сертификата нет штрафа — просто обновите и установите новый.
Можно ли мониторить несколько доменов из одного скрипта?
Да. Вот скрипт, который проверяет все ваши домены и выводит оставшиеся дни:
#!/bin/bash
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
days_left=$(( ($(date -d "$expiry" +%s) - $(date +%s)) / 86400 ))
if [ "$days_left" -lt 30 ]; then
echo "WARNING $domain: $days_left days left"
else
echo "OK $domain: $days_left days left"
fi
done
Примечание: Синтаксис date -d специфичен для Linux. На macOS используйте date -j -f "%b %d %H:%M:%S %Y %Z".