Зазвичай дзвонить клієнт: «Сайт пише, що він небезпечний». Кожен браузер показує попередження на весь екран, пройти далі ніхто не може, а магазин не отримав жодного замовлення від опівночі. Прострочений сертифікат — це повний збій із лякаючим повідомленням.
Ось порядок дій. Перша частина повертає сайт до життя. Друга гарантує, що ви більше не матимете такої розмови.
Хвилина 0: переконайтеся, що це справді термін дії
Виконайте на будь-якій машині:
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates -issuer
Ви отримаєте notBefore, notAfter і видавця. Якщо notAfter у минулому, це термін дії. Якщо дати нормальні, але браузери все одно скаржаться, перейдіть до розділу про ланцюжок нижче: проблема в пропущеному проміжному сертифікаті або неспівпадінні імені хоста, а не в терміні дії.
Перевірте також, чи сайт стоїть за Cloudflare або іншим проксі. Якщо Cloudflare працює в режимі SSL «Full», відвідувачі бачать сертифікат Cloudflare, і він оновлюється сам. Прострочений сертифікат стоїть на origin-сервері; виправлення те саме, але не таке термінове. Якщо потрібно виграти час, на годину переключіть Cloudflare з «Full (strict)» на «Full».
Хвилина 2: з’ясуйте, як видано сертифікат
Подивіться на видавця в результаті команди вище.
- Let’s Encrypt (R10, R11, E5, E6 тощо): щось автоматизоване мало його оновити й не оновило. Зайдіть на сервер і знайдіть клієнт:
certbot,acme.sh, Caddy, Traefik, AutoSSL у cPanel або панель хостингу. - Комерційний ЦС (DigiCert, Sectigo, GlobalSign): хтось купив його рік тому, а лист про продовження пішов у скриньку, яку ніхто не читає. Потрібно купити або продовжити сертифікат і встановити вручну.
- Керований хостингом (Kinsta, WP Engine, Cloudways, SiteGround): відкрийте їхню панель; зазвичай там є кнопка «оновити» або «перевипустити», а підтримка може зробити це примусово.
Хвилина 5: оновлення через Let’s Encrypt
На сервері з certbot:
sudo certbot renew --force-renewal
sudo systemctl reload nginx # or apache2
Якщо не вийшло, прочитайте помилку. Типові причини:
- Змінився DNS. Домен тепер вказує на Cloudflare або новий хост, і перевірка HTTP-01 потрапляє не на той сервер. Скористайтеся перевіркою DNS-01 або запустіть certbot там, куди справді надходить трафік.
- Закрито порт 80. Для HTTP-01 порт 80 має бути відкритий з інтернету. Добросовісна зміна в файрволі це зламала.
- Перевищено ліміт запитів. Let’s Encrypt дозволяє 5 дублікатів сертифіката на тиждень. Якщо зламаний cron повторював спроби кілька днів, ви наштовхнулися на цей ліміт. Зачекайте або випустіть сертифікат для трохи іншого набору імен (додайте
www.). - Зник cron або таймер systemd.
systemctl list-timers | grep certbotмає показати таймер. Якщо його немає, виконайтеsudo systemctl enable --now certbot.timer.
У Caddy або Traefik перезапустіть службу й прочитайте журнал: вони оновлюють сертифікати під час запуску.
Хвилина 10: оновлення комерційного сертифіката
Увійдіть у кабінет ЦС, оновіть сертифікат і згенеруйте на сервері новий CSR:
openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
Пройдіть підтвердження володіння (e-mail або DNS), завантажте сертифікат і пакет проміжних сертифікатів, встановіть обидва та перезавантажте вебсервер. Не пропускайте пакет: через це виходить сертифікат, який працює в Chrome на вашому комп’ютері й не працює на Android.
Хвилина 15: перевірте ланцюжок, а не лише дати
echo | openssl s_client -servername example.com -connect example.com:443 -showcerts 2>/dev/null | grep -E "s:|i:"
Ви маєте побачити кінцевий сертифікат, потім один-два проміжні та кореневий, якому довіряє клієнт. «unable to get local issuer certificate» означає, що бракує проміжного сертифіката. Перевірте з другого пристрою через мобільний інтернет: корпоративні мережі кешують сертифікати так, що проблеми ховаються.
Потім відкрийте сайт у приватному вікні. Якщо попередження зникло, повідомте клієнта й запишіть, що зламалося.
Щоб це не повторилося: три рівні захисту
1. Полагодьте автоматизацію. Який би механізм оновлення не підвів, зробіть так, щоб він збоїв голосно. У certbot додайте --deploy-hook, який у разі успіху пінгує адресу heartbeat-монітора: тоді тиша означатиме проблему. У панелі хостингу ввімкніть їхній лист про термін дії та спрямуйте його на спільну поштову скриньку.
2. Відстежуйте термін дії ззовні. Автоматизація мовчки ламається частіше, ніж думають. Зовнішній SSL-монітор читає сертифікат, який бачать ваші відвідувачі, і сповіщає за 30, 14 та 3 дні до закінчення терміну дії. У Tenium це один SSL-монітор на ім’я хоста (перевірки SSL і терміну дії домену доступні з тарифу Starter за $7 на місяць), а кожен https-монітор записує термін дії в межах звичайної перевірки. Сповіщення надходять у Telegram або на e-mail, а сторінка статусу клієнта показує, що з сертифікатом усе гаразд.
3. Внесіть це у звіт для клієнта. Рядок «Сертифікат SSL: дійсний, залишилося 61 день» у щомісячному звіті дає клієнтові відчуття турботи, а вас змушує раз на місяць перевіряти це без зайвих роздумів.
Про сертифікати на 90 і 47 днів
Індустрія переходить на коротші терміни дії сертифікатів. Зараз у Let’s Encrypt це 90 днів, а CA/Browser Forum погодив шлях до сертифікатів на 47 днів до 2029 року. Через це автоматизація стає обов’язковою, а зовнішній моніторинг — єдиною розумною страховкою: якщо оновлення зламається, у вас є дні, а не місяці, перш ніж відвідувачі побачать попередження. Налаштуйте його зараз, поки пам’ять про останній збій свіжа.
Як працюють перевірки, читайте на сторінці моніторингу SSL, а переглянути будь-який сертифікат просто зараз можна за допомогою безкоштовного SSL-чекера.
Читайте також
Дивіться також моніторинг терміну дії домену, інструмент DNS-запитів та інструмент для HTTP-заголовків, щоб перевірити, що справді отримує відвідувач, а також порівняння Tenium з Pingdom, якщо перевірки сертифікатів впливають на вибір постачальника. Магазинам, які не можуть дозволити собі прострочений сертифікат, варто прочитати про моніторинг для інтернет-магазинів.
Читайте також
Пов’язані сторінки Tenium
Відстежуйте перший сайт безкоштовно
30 моніторів безкоштовно, перевірки з 2 регіонів, без банківської картки. Перевірка SSL і терміну дії домену — від $7 на місяць.