SSL-certificate expiry watch в Python
Самоподписанный скрипт проверяет SSL сертификат и шлёт алерт за 14 дней до expiry.
Рецепт
import ssl, socket, datetime
def days_left(host: str, port: int = 443) -> int:
ctx = ssl.create_default_context()
with socket.create_connection((host, port), timeout=10) as sock:
with ctx.wrap_socket(sock, server_hostname=host) as ss:
not_after = ss.getpeercert()["notAfter"]
exp = datetime.datetime.strptime(not_after, "%b %d %H:%M:%S %Y %Z")
return (exp - datetime.datetime.utcnow()).days
if days_left("example.com") < 14:
raise SystemExit("SSL expiring soon")
То же самое в Enterno.io
У Enterno проверка SSL + мониторинг: автоматические письма + Telegram за 14 и 3 дня до expiry, проверка всей chain (intermediate, OCSP staple, cipher).
Похожие рецепты
Ваш cron стал молча не запускаться. Нужен алерт, если скрипт пропустил окно выполнения.
Сайт в HSTS preload-листе, но после рефакторинга nginx конфиг заголовок пропал. Через 3 месяца домен будет удалён из preload-листа. Нужен ежедневный чек.
Caddy обычно сам обновляет cert, но один раз rate-limit от Let's Encrypt сорвал renewal — узнали за 2 дня до expiry. Нужен ежедневный двойной чек.