Обновление Let’s Encrypt
Сертификат обычно обновляется автоматически, но автоматике тоже нужна проверка.
Хорошая практика: периодически проверять timer, делать dry-run и смотреть, что Nginx после обновления отдаёт актуальный сертификат.
Проверить certbot timer
sudo systemctl list-timers | grep certbot
Ожидаемо: есть timer, который будет запускать renewal.
Также можно посмотреть службы:
systemctl status certbot.timer --no-pager
Dry-run
sudo certbot renew --dry-run
Dry-run проверяет процедуру renewal без замены production-сертификата.
Нормально, если в конце нет ошибки.
Если dry-run падает, автоматическое обновление тоже может не сработать.
Проверить дату сертификата
openssl x509 -in /etc/letsencrypt/live/getsrv.app/fullchain.pem -noout -dates
Смотрите notAfter.
Проверить, что Nginx использует этот сертификат
echo | openssl s_client -connect getsrv.app:443 -servername getsrv.app 2>/dev/null \
| openssl x509 -noout -dates -subject -issuer
Это важнее, чем просто проверить файл на диске.
Файл может быть новый, но Nginx может ещё не перечитать его.
Проверить конфиг Nginx
sudo nginx -t
Если тест не прошёл, reload делать нельзя.
Перечитать Nginx
sudo systemctl reload nginx
После reload ещё раз проверить публичный сертификат:
echo | openssl s_client -connect getsrv.app:443 -servername getsrv.app 2>/dev/null \
| openssl x509 -noout -dates
Проверить HTTP после renewal
curl -kI https://getsrv.app/
curl -kI https://getsrv.app/sitemap-index.xml
curl -kI https://getsrv.app/no-such-page
Ожидаемо:
/ 200
/sitemap-index.xml 200
/no-such-page 404
Где обычно ломается renewal
Порт проверки занят
Если используется HTTP challenge, certbot должен иметь возможность пройти проверку через порт 80.
Проверьте listener:
sudo ss -lntp | grep ':80'
Nginx reload не произошёл
Сертификат обновился, но сервер продолжает отдавать старый.
Проверка:
echo | openssl s_client -connect getsrv.app:443 -servername getsrv.app 2>/dev/null \
| openssl x509 -noout -dates
Если дата старая, выполните:
sudo nginx -t
sudo systemctl reload nginx
Неверный путь к сертификату
Проверьте Nginx config:
sudo grep -RIn "ssl_certificate" /etc/nginx/sites-enabled /etc/nginx/conf.d
Пути должны указывать на актуальные файлы в /etc/letsencrypt/live/....
Сертификат есть, но имя не совпадает
Проверка SAN:
openssl x509 -in /etc/letsencrypt/live/getsrv.app/fullchain.pem -noout -ext subjectAltName
Если нужного имени нет в SAN, нужен новый сертификат с правильным набором доменов.
Минимальный monthly-check
sudo certbot renew --dry-run
sudo nginx -t
openssl x509 -in /etc/letsencrypt/live/getsrv.app/fullchain.pem -noout -dates
echo | openssl s_client -connect getsrv.app:443 -servername getsrv.app 2>/dev/null \
| openssl x509 -noout -dates
curl -kI https://getsrv.app/
Если всё прошло, renewal-схема здорова.