BASH
#certbot#letsencrypt#openssl#acme#ssl#troubleshooting

Certbot: проверка ACME challenge и срока действия сертификата

Проверка доступности .well-known/acme-challenge и проверка дат сертификата через openssl s_client. Для диагностики ошибок выпуска и продления.

Как использовать

  1. Проверка challenge: создай файл в .well-known/acme-challenge/ и запроси его через curl по HTTP.
  2. Проверка срока: openssl s_client + openssl x509 -noout -dates; подставь свой домен и порт 443.

Две типовые проверки: доступен ли каталог для HTTP-01 challenge (иначе certbot не сможет подтвердить домен) и какие даты у сертификата, который реально отдаёт сервер по HTTPS.


1. Доступность каталога для ACME challenge

Let’s Encrypt обращается по адресу http://домен/.well-known/acme-challenge/TOKEN. Файл должен отдаваться по HTTP без редиректа на HTTPS до выпуска сертификата.

Пример для домена example.com и webroot BitrixVM:

mkdir -p /home/bitrix/ext_www/example.com/public_html/.well-known/acme-challenge
echo test > /home/bitrix/ext_www/example.com/public_html/.well-known/acme-challenge/test.txt
chown -R bitrix:bitrix /home/bitrix/ext_www/example.com/public_html/.well-known

curl -s http://example.com/.well-known/acme-challenge/test.txt

Ожидаемый ответ: строка test. Если пусто, 404 или редирект — nginx не отдаёт этот путь или путь в certbot -w указан неверно.


2. Срок действия сертификата по HTTPS

Проверка, какой сертификат отдаёт сервер и до какой даты он действителен:

echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
  | openssl x509 -noout -dates

Вывод: notBefore и notAfter — период действия. Если после продления даты не обновились, выполни systemctl reload nginx, чтобы nginx подхватил новые файлы из /etc/letsencrypt/live/.


Источники: Let’s Encrypt — HTTP-01 challenge, OpenSSL s_client, x509.