Обновлено:

Обновление 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-схема здорова.