Сообщение об ошибке
x509: certificate has expired or is not yet valid: current time 2026-08-20T15:47:41+03:00 is after 2026-08-19T12:47:41Z
Обе метки времени подставляются при каждой ошибке свои: время по часам проверяющей стороны и граница срока действия сертификата. Слова «is after» означают, что срок действия истёк, а «is before» — что сертификат ещё не действителен.
Go crypto/x509 — CertificateInvalidError (Expired)
Что это означает
Время проверки выходит за пределы интервала [NotBefore, NotAfter] сертификата. Go указывает в сообщении обе стороны сравнения, поэтому это одна из немногих ошибок, которые сами содержат свой диагноз: прочитайте обе метки времени и определите, где ошибка — в сертификате или в часах.
Почему это происходит
Автоматическое продление перестало работать
частоОстановившийся таймер certbot, учётная запись ACME, утратившая авторизацию, или балансировщик нагрузки, который отдаёт старый сертификат, хотя продление в другом месте прошло успешно. Максимальный срок действия публичных сертификатов к 2029 году сокращается до 47 дней, поэтому ручное продление больше не годится.
Часы проверяющей машины показывают неверное время
частоОшибки с «is before» на только что загрузившихся устройствах (Raspberry Pi без RTC, виртуальные машины, восстановленные из снимков, IoT-устройства) обычно означают, что часы показывают 1970 год или прошлый месяц — тогда любой действующий сертификат выглядит ещё не действительным или просроченным.
Расхождение часов на границе срока действия
иногдаСертификат, выпущенный несколько секунд назад (NotBefore = текущий момент), не проходит проверку как ещё не действительный, если его проверяет хост, часы которого отстают на минуту; с короткоживущими сертификатами service mesh в это окно легко попасть.
Как исправить
- 1.
Посмотрите фактические даты сертификата, отдаваемого сервером
Проверьте, какой сертификат прямо сейчас приходит с эндпоинта: после продления «срок действия истёк» часто означает «новый сертификат есть, но сервер его не отдаёт». Если даты в файле на диске и в сертификате, полученном по сети, различаются, перезагрузите конфигурацию прокси, на котором терминируется TLS, или перезапустите его.
bash echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \ | openssl x509 -noout -dates # notBefore=... notAfter=... - 2.
Исправьте синхронизацию времени и следите за ней
При ошибках с «is before» исправьте часы и следите, чтобы время оставалось точным: проверка сертификата надёжна ровно настолько, насколько точно локальное время.
bash timedatectl status # NTP active? sudo timedatectl set-ntp true - 3.
Автоматизируйте продление и настройте оповещения об оставшемся сроке действия
Продлевайте сертификат, когда пройдёт 2/3 срока действия (так certbot делает по умолчанию), и отслеживайте истечение срока извне, а не с самого хоста. Наша проверка состояния подписей домена (Signature Health) оценивает именно это — цепочку, даты и новые правила о сокращённых сроках действия — и бесплатно присылает оповещения об истечении срока.