SSL-сертификат истекает: что делать до блокировки браузером
SSL истекает: пороги 30/14/7 дней, продление LE на BitrixVM/certbot, emergency при NET::ERR_CERT_DATE_INVALID, mixed content и алерт за 14 дней.

Письмо хостинга "SSL истекает через 7 дней" ушло в спам, а в понедельник покупатели видят красный экран "Подключение не защищено" и не могут оплатить заказ. За один проход вы узнаете, сколько дней осталось до блокировки браузером. Продлите сертификат на своём стеке (Let's Encrypt, панель хостинга или платный УЦ) и поставите алерт, чтобы ситуация не повторилась.
SSL-сертификат – это "паспорт" HTTPS: браузер доверяет сайту, пока не истечёт дата notAfter. Let's Encrypt живёт 90 дней, certbot обычно продлевает за 30 дней до конца, но автопродление часто ломается (закрыт порт 80, autorenew = False, nginx не перезагрузили). Сначала зафиксируйте срок, потом продлите через панель хостинга или certbot, после – проверьте живой endpoint снаружи и включите мониторинг.
Речь про сайт на своём хостинге, в том числе "1С-Битрикс: Управление сайтом" на BitrixVM или VPS. Это не CRM Bitrix24 – смотрите свой домен витрины.
Типичная сцена: письмо хостинга отложили на понедельник, в субботу Chrome показывает NET::ERR_CERT_DATE_INVALID, certbot пишет "skipped – not due", хотя срок уже вчера. На практике, например, виноваты autorenew = False и отсутствие reload nginx после подмены fullchain.pem.
Узнайте, сколько дней осталось – когда бить тревогу

Для Let's Encrypt (90 дней) окно renew открывается примерно за 30 дней – это норма. Для платных cert на 200+ дней те же пороги – календарь действий, не повод для паники за 60 дней.
| Дней до notAfter | Что это значит | Что делать |
|---|---|---|
| 30 и больше | Планирование, renew ещё рано для LE | Записать дату, включить алерт, проверить autorenew |
| 14–30 | Пора готовить продление | dry-run certbot или заказ в панели; warning в BX Pulse |
| 7–13 | Высокий риск пропустить выходные | Продлить в рабочее окно, не ждать письма хостинга |
| 1–3 | Критично: блокировка браузером завтра | Emergency-блок ниже; critical-алерт |
| 0 (истёк) | Клиенты видят красный экран | Force-renewal, порт 80, reload nginx – срочно |
Сделайте: завести напоминания 30/14/7/1, а не одно письмо в почту на том же домене. Не делайте: надеяться на "само продлится" без проверки cron или systemd timer.
Проверьте срок и цепочку за две минуты
Быстрый чек перед продлением: понять "скоро" или "уже истёк", и отличить просрочку от битой цепочки. Полный разбор notAfter, issuer и SAN – в отдельной инструкции как проверить срок действия SSL; здесь только минимум для решения.
- Откройте сайт в Chrome → замок → "Сертификат" → поле "Действителен до" (notAfter).
- Вставьте домен в онлайн-проверку SSL – сравните дату с браузером.
- Если браузер пишет NET::ERR_CERT_DATE_INVALID – срок точно вышел, идите в emergency-блок.
- Если дата жива, но ошибка AUTHORITY_INVALID – проблема цепочки, не срочное продление "на всякий случай".
- Запишите: домен, notAfter, дни до конца, issuer – пригодится в тикет хостингу.
Сделайте: сверять внешний checker и браузер. Не делайте: дублировать из B09 полный openssl-how-to – там все команды и таблица полей.
Продлите сертификат пошагово: LE, хостинг, платный

Выберите сценарий по тому, где живёт сертификат. Один сайт – один сценарий, не мешайте файлы от разных УЦ.
Сценарий A: BitrixVM и Let's Encrypt через меню
- SSH → меню BitrixVM → 9 (Configure LE) → 2 (new certificate) → 1 (Get LE certificate).
- Email для LE и домены (основной + www при необходимости).
- Автоперевыпуск ~за 20 дней, cron суббота 02:00 – см. курс BitrixVM.
- Проверьте сайт с телефона через LTE, не только с сервера.
Сценарий B: VPS с certbot (nginx/apache)
- Проверка без риска:
sudo certbot renew --dry-run. - Если OK:
sudo certbot renewи убедитесь, что deploy-hook делаетsystemctl reload nginx. - Файл для nginx –
fullchain.pem, не одиночныйcert.pem. - Не крутите renew в цикле при ошибке – лимит LE: 5 неудачных проверок на hostname в час.
На VPS перед renew проверьте порт 80 для HTTP-01. Стек можно держать у Beget или другого провайдера – правила те же.
Сценарий C: shared-хостинг
Панель SSL → "Продлить" / Let's Encrypt. Кнопка серая – тикет с notAfter из checker.
Сценарий D: платный SSL
Продление = новый заказ; кнопка в кабинете Рег.ру активна за 30 дней до конца (справка). Файлы в BitrixVM: own certificate, /home/bitrix/ssl/.
Сделайте: после любого сценария – внешний SSL checker. Не делайте: считать зелёную галочку в панели хостинга доказательством для всех клиентов.
Срочно исправьте, если браузер уже блокирует

Симптомы: NET::ERR_CERT_DATE_INVALID, curl exit 60, корзина не открывается. HSTS на iPhone часто не даёт обойти предупреждение. Это не HTTP-down: снаружи может быть 200, но клиенты заблокированы – см. проверку работоспособности сайта.
- Убедитесь, что порт 80 слушает nginx/apache – для истёкшего LE снова нужен HTTP-01 на :80.
- Проверьте
/etc/letsencrypt/renewal/*.conf: еслиautorenew = False, certbot пропустит renew даже при expired cert. - Выпустите принудительно:
sudo certbot renew --force-renewal --cert-name ваш-домен.ru. - Перезагрузите веб-сервер:
sudo systemctl reload nginx. - Сверьте публичный endpoint (checker, телефон через LTE) с файлом на диске – после failed renew symlink live/ иногда откатывается на старый expired fullchain.
Сделайте: чинить в первую очередь, мониторинг – после зелёного замка. Не делайте: отключать HTTPS "временно" на боевой витрине – mixed content и потеря доверия хуже часа простоя.
Устраните ошибки цепочки и mixed content после обновления
Бывает: renew "успешен", а браузер всё ещё ругается. Типичные причины:
- В nginx указан
cert.pemвместоfullchain.pem– incomplete chain. - Nginx не перезагружали – клиенты видят старый сертификат из памяти worker.
- CDN (Cloudflare и др.): edge-сертификат жив, origin на вашем сервере истёк – ошибка 526.
- В БД Битрикс остались ссылки
http://на картинки и скрипты – mixed content после перехода на новый cert.
Mixed content: консоль браузера → http-ресурсы → URL сервера в настройках Битрикс на https, при необходимости search-replace в БД. CDN: режим Full (strict) только после живого origin-cert.
Сделайте: после продления – checker снаружи + одна тестовая покупка. Не делайте: менять CDN и сертификат одновременно без фиксации, что именно сломалось.
Настройте алерт за 14–30 дней до истечения
Ручной календарь при 90-дневных LE проигрывает выходным и спаму. Паттерн: внешняя проверка SSL + Telegram/email до блокировки браузером.
- Создайте аккаунт BX Pulse и добавьте URL витрины.
- Пороги: warning < 14 дней, critical < 3 дней или ошибка handshake.
- Telegram + тестовое уведомление.
- Warning раз в квартал – health-check автопродления.
Общий onboarding (модуль, heartbeat) – в гайде мониторинг сайта на Битрикс. DIY: cron с openssl x509 -checkend.
Сделайте: алерт на канал, который не зависит от почты на том же домене. Не делайте: единственное напоминание "письмо от хостинга".
Что дальше: закрепите результат
- Запишите notAfter, issuer и сценарий продления, который сработал.
- Проверьте autorenew / cron BitrixVM или certbot timer – не только разовый renew.
- Добавьте сайт в мониторинг с порогами 14/3 дня.
- После renew – внешний checker, не только галочка в панели.
- Если снова увидите DATE_INVALID – откройте этот чеклист с emergency-блока, не ждите понедельника.
Итог: дедлайн зафиксирован, cert продлён, endpoint проверен снаружи, алерт включён. Проверка срока – в отдельной инструкции; здесь – действия при истечении.
Материал проверен. Автор: Максим Мольков, основатель BX Pulse, разработчик 1С-Битрикс.
Источники: документация Let's Encrypt (rate limits, integration guide), курс 1С-Битрикс BitrixVM LE (dev.1c-bitrix.ru), справка Рег.ру по продлению SSL (help.reg.ru), DigitalOcean certbot renew (docs.digitalocean.com).
Вопросы и ответы
Короткие ответы про продление SSL и что делать, когда срок подходит к концу.
Чем проверка срока SSL отличается от продления?
Почему certbot пишет "not due for renewal", хотя сертификат просрочен?
certbot renew --force-renewal --cert-name домен. Убедитесь, что порт 80 открыт для HTTP-01.