Связаться через Telegram Написать

← Все статьи

Сертификат Let's Encrypt не выпускается: ошибки и решения

Бесплатный SSL-сертификат от Let's Encrypt обычно выпускается в один клик — в панели хостинга или командой certbot. Но иногда вместо сертификата появляется ошибка, а сайт продолжает открываться с предупреждением «Подключение не защищено».

Сертификат Let's Encrypt не выпускается

Если в тексте ошибки есть конкретная причина, ниже найдется конкретное решение. Если же панель пишет только «Verification failed» без подробностей или ошибка то появляется, то нет, поможет чек-лист в конце статьи.


Как Let's Encrypt проверяет домен

Прежде чем выдать сертификат, Let's Encrypt проверяет, что вы действительно управляете доменом. Чаще всего для этого используется HTTP-проверка: сервер создает на сайте временный файл по адресу /.well-known/acme-challenge/, а Let's Encrypt пытается открыть его по протоколу HTTP через порт 80.

Если файл открылся и его содержимое совпало — сертификат выпускается. Если нет — появляется ошибка. Поэтому почти все проблемы сводятся к одному: по какой-то причине Let's Encrypt не может получить этот файл.

💡 Важно: Let's Encrypt проверяет каждый домен из сертификата отдельно. Если сертификат выпускается для example.com и www.example.com, оба адреса должны вести на ваш сервер.


DNS problem: NXDOMAIN

DNS problem: NXDOMAIN looking up A for example.com - check that a DNS record exists for this domain

Причина: у домена нет DNS-записи A (или AAAA), то есть Let's Encrypt не знает, на какой сервер идти. Так бывает, если домен только что зарегистрирован, записи еще не созданы или в имени поддомена есть опечатка.

Решение: в панели регистратора или DNS-хостинга создайте запись A с IP-адресом вашего сервера и подождите, пока она обновится. Проверить запись можно командой dig или через сервис dns.google:

dig +short example.com A

Invalid response: 404 или 403

Invalid response from http://example.com/.well-known/acme-challenge/...: 404

Причина: Let's Encrypt дошел до сервера, но не нашел проверочный файл. Чаще всего виноваты правила в .htaccess, которые перенаправляют все запросы в index.php или в другую папку, неправильная корневая папка сайта или запрет доступа к скрытым папкам, которые начинаются с точки. Код 403 означает, что файл есть, но доступ к нему запрещен.

Решение: исключите папку проверки из перенаправлений. В Apache добавьте правило в начало .htaccess, сразу после RewriteEngine On:

RewriteRule ^\.well-known/acme-challenge/ - [L]

В Nginx — отдельный блок location в конфигурации сайта:

location ^~ /.well-known/acme-challenge/ {
    root /var/www/example.com;
}

Если в ошибке указан другой IP-адрес или в ответе видна чужая страница, значит, домен ведет не на ваш сервер. Тогда смотрите раздел с чек-листом.


Timeout during connect

Timeout during connect (likely firewall problem)

Причина: Let's Encrypt не смог подключиться к серверу за отведенное время. Чаще всего порт 80 закрыт файрволом сервера или хостинга. Иногда хостинг блокирует запросы из других стран, а Let's Encrypt проверяет домен сразу с нескольких серверов в разных частях мира.

Решение: откройте порт 80 в файрволе сервера и в панели хостинга, если там есть свой. Для ufw в Ubuntu это одна команда:

sudo ufw allow 80/tcp

Если у сервера включена блокировка по странам, отключите ее хотя бы для порта 80.

⚠️ Важно: порт 80 нельзя закрывать даже после выпуска сертификата. Он понадобится для автоматического продления раз в несколько месяцев, а для посетителей достаточно настроить с него редирект на HTTPS.


Connection refused

Connection refused

Причина: сервер доступен, но на порту 80 ничего не работает: веб-сервер остановлен или настроен только на HTTPS.

Решение: проверьте, что веб-сервер запущен и слушает порт 80. Если сайт настроен только на 443 порт, добавьте для него HTTP-версию с редиректом на HTTPS, но так, чтобы папка /.well-known/acme-challenge/ оставалась доступной.


CAA record prevents issuance

CAA record for example.com prevents issuance

Причина: у домена есть DNS-запись CAA, которая разрешает выпускать сертификаты только определенным центрам сертификации, и Let's Encrypt в этом списке нет.

Решение: удалите запись CAA или добавьте в нее Let's Encrypt:

example.com.  CAA  0 issue "letsencrypt.org"

Too many failed authorizations

too many failed authorizations recently

Причина: у Let's Encrypt есть лимиты. Например, не больше 5 неудачных проверок одного домена в час. Если нажимать кнопку выпуска снова и снова, лимит быстро заканчивается, и даже после исправления настоящей причины сертификат не выпустится.

Решение: подождите час и попробуйте снова — но только после того, как нашли и исправили причину. Похожая ошибка too many certificates already issued означает, что за последнюю неделю для этого же набора доменов уже выпустили 5 сертификатов. В этом случае ждать придется дольше — до полутора суток. Точное время, после которого можно повторить попытку, обычно указано в самом тексте ошибки.


Если ошибка без подробностей или плавающая

Панели управления часто показывают общую ошибку вроде «Verification failed for the following domain(s)» без пояснений. Бывает и так, что сертификат то выпускается, то нет. Тогда проверьте по порядку:

Проверить проверочную папку можно так — создайте файл в корневой папке сайта и запросите его:

mkdir -p .well-known/acme-challenge
echo test > .well-known/acme-challenge/test.txt
curl http://example.com/.well-known/acme-challenge/test.txt

Не забудьте удалить тестовый файл после проверки.

Подробную причину почти всегда можно найти в логах. У certbot это файл /var/log/letsencrypt/letsencrypt.log, а у панелей управления — свой раздел логов или отдельная папка в /var/log. В логе указан конкретный домен, который не прошел проверку, и что Let's Encrypt получил в ответ.


Итог

Почти все ошибки Let's Encrypt означают одно: проверочный файл не удалось получить по HTTP. Если в ошибке есть подробности — ищите решение по ее тексту. Если ошибка общая или плавающая — проверьте DNS, www, AAAA и CAA, доступность папки /.well-known/acme-challenge/ и порта 80, а перед повторной попыткой подождите час, чтобы не упереться в лимит.

🔒 Если сертификат все равно не выпускается, напишите мне — разберусь и настрою HTTPS.

Опубликовано

← Все статьи