HTTP-01 проверяет файл по HTTP на порту 80; DNS-01 проверяет TXT-запись _acme-challenge; TLS-ALPN-01 проверяет специальный ответ TLS на 443. Для wildcard нужен DNS-01. Для обычного сайта выбирайте тот путь, который можно автоматически поддерживать и проверять при каждом продлении.

ACME выдаёт сертификат после доказательства контроля над идентификатором. Тип challenge выбирает ACME-клиент в пределах предложенных CA вариантов. У Let’s Encrypt три распространённых способа; их условия изложены в официальной документации, HTTP-01 и DNS-01 определены в RFC 8555, TLS-ALPN-01 — в RFC 8737. Задача администратора — обеспечить маршрутизацию и продление, а не один раз пройти ручную проверку.
Что проверяет каждый маршрут
| Метод | Маршрут валидатора | Когда подходит | Ограничение |
|---|---|---|---|
| HTTP-01 | http://имя/.well-known/acme-challenge/..., порт 80 | Обычный публичный веб-сайт | Не выдаёт wildcard; запрос должен дойти до нужного токена |
| DNS-01 | TXT _acme-challenge.имя | Wildcard, внутренний сервер, отсутствие входящего HTTP | Нужен безопасный доступ к DNS API или ручное обновление при каждом продлении |
| TLS-ALPN-01 | TLS на 443 с ALPN acme-tls/1 | Клиент управляет TLS-терминатором | Прокси должен пропускать специальное рукопожатие; wildcard не поддерживается |
HTTP-01 нельзя проверить на произвольном порту. Переадресация допустима в пределах правил CA, но CDN и редиректы нередко уводят запрос не на тот сервер. У DNS-01 проверяют TXT в публичной авторитетной зоне: локальный DNS-кэш может запаздывать, а рекурсивный ответ не всегда показывает актуальное состояние. Сравните авторитетный и рекурсивный ответы dig до повторной попытки.

Матрица выбора для реальной инфраструктуры
Если нужен *.example.com, выбирайте DNS-01 и выдавайте DNS-токену минимальные права. Если сайт доступен на 80 и веб-сервер контролируется вашим ACME-клиентом, HTTP-01 обычно проще в сопровождении. Если порт 80 закрыт, но клиент управляет внешним TLS-терминатором на 443, возможен TLS-ALPN-01. При CDN проверьте, где фактически заканчивается TLS и куда маршрутизируется /.well-known/; внутренний nginx может вообще не видеть проверку. О том, как определить внешний сертификат, см. проверку s_client.
Перед запуском автоматизации опишите, кто владеет DNS API, веб-корнем и прокси. Для DNS-01 применяйте отдельный ограниченный токен; не кладите ключ провайдера в репозиторий. Для HTTP-01 откройте точный путь, а не весь административный интерфейс. При нескольких фронтендах токен должен быть доступен с каждого публичного адреса или попадать в общий backend. Проверьте DNS-записи корня домена и TTL, если изменяли делегирование.
Предварительная проверка без выпуска сертификата
dig +short TXT _acme-challenge.example.com
curl -i http://example.com/.well-known/acme-challenge/test-token
openssl s_client -connect example.com:443 -servername example.com -alpn acme-tls/1 </dev/null
# Для настоящего ACME-токена используйте staging CA и dry-run клиента.
Эти команды проверяют маршрут, но не доказывают успешную авторизацию: содержимое токена и ответ TLS формирует ACME-клиент. Для Certbot используйте официальный dry-run со staging, затем проверьте планировщик продления и журнал. Ошибку «unauthorized» связывайте с конкретной проверкой: HTTP 404 указывает на путь, отсутствие TXT — на публикацию DNS, неверный ALPN — на TLS-терминатор. Не полагайтесь на выдуманный текст лога: у разных клиентов формулировки различаются.
Как сделан материал
Матрица составлена по RFC 8555, RFC 8737 и правилам Let’s Encrypt; команды являются предварительными проверками, а не отчётом о реально выпущенном сертификате. В исследовании SerpAPI сравнили выдачу Google US и Яндекса; Wordstat региона 225 не вернул оценку точной фразы, для более широкой certbot dns 01 получено 9. Частотность не является мерой безопасности метода.
Частые вопросы
Можно ли получить wildcard через HTTP-01?
У Let’s Encrypt для wildcard требуется DNS-01.
Нужно ли открывать 80 для TLS-ALPN-01?
Сам TLS-ALPN-01 работает на 443. Проверьте, что именно ваш внешний TLS-терминатор принимает специальный ALPN.
Почему TXT уже виден мне, а CA его не видит?
Проверьте авторитетные NS, делегирование, имя записи и время кэширования у разных резолверов.
Когда выбирать DNS-01 без wildcard?
Когда входящий HTTP недоступен или сертификат нужен внутреннему сервису, при условии безопасной автоматизации DNS.