DNS-01 --- это тип ACME-проверки, который поддерживает wildcard-сертификаты (*.example.com). Он подтверждает владение доменом путём добавления TXT-записи в DNS --- без веб-сервера и доступа к порту 80.
Как это работает
- Let’s Encrypt предоставляет токен для каждого домена
- GetHTTPS вычисляет SHA-256 дайджест авторизации ключа и кодирует его в base64url
- Вы создаёте TXT-запись в
_acme-challenge.yourdomain.comс этим значением - Let’s Encrypt запрашивает публичный DNS на наличие TXT-записи
- Если значение совпадает, проверка пройдена и сертификат выпускается
С GetHTTPS шаги 1-2 выполняются автоматически --- вам нужно лишь скопировать имя записи и значение в панель вашего DNS-провайдера.
Пошаговая настройка
Шаг 1: Получите данные TXT-записи от GetHTTPS
GetHTTPS покажет вам:
- Имя записи:
_acme-challenge.yourdomain.com - Значение записи: строка в кодировке base64url (~43 символа)
Шаг 2: Добавьте TXT-запись у вашего DNS-провайдера
| Поле | Значение |
|---|---|
| Тип | TXT |
| Имя | _acme-challenge (некоторые провайдеры автоматически добавляют домен) |
| Значение | Строка, показанная в GetHTTPS --- скопируйте и вставьте точно |
| TTL | 60 секунд (или минимально допустимое у вашего провайдера) |
Инструкции для конкретных провайдеров:
Cloudflare
- Панель управления -> ваш домен -> DNS -> Records -> Add record
- Type: TXT, Name:
_acme-challenge, Content: вставьте значение - TTL: Auto
- Нажмите Save
AWS Route 53
- Hosted zones -> ваш домен -> Create record
- Record name:
_acme-challenge - Record type: TXT
- Value:
"вставьте-значение-сюда"(включите двойные кавычки --- Route 53 их требует) - TTL: 300
- Нажмите Create records
GoDaddy
- DNS Management -> Add
- Type: TXT, Name:
_acme-challenge, Value: вставьте значение - TTL: 1 Hour (минимально доступное)
- Нажмите Save
Namecheap
- Domain List -> Manage -> Advanced DNS -> Add new record
- Type: TXT, Host:
_acme-challenge, Value: вставьте значение - TTL: Automatic
- Нажмите Save all changes
Google Cloud DNS
gcloud dns record-sets create _acme-challenge.yourdomain.com. \
--zone=your-zone --type=TXT --ttl=60 --rrdatas="the-value"
DigitalOcean
- Networking -> Domains -> ваш домен -> Add record
- Type: TXT, Hostname:
_acme-challenge, Value: вставьте значение - TTL: 30
Шаг 3: Дождитесь распространения DNS
Изменения DNS занимают от 1 до 15 минут в зависимости от вашего провайдера и настроек TTL. Предварительная проверка GetHTTPS убеждается, что TXT-запись видна из публичного интернета, прежде чем отправить запрос в Let’s Encrypt.
Проверьте распространение вручную:
dig TXT _acme-challenge.yourdomain.com +short
# Должно вернуть ваше значение (в кавычках)
Или используйте онлайн-инструмент проверки распространения, чтобы убедиться, что запись видна глобально.
Шаг 4: Подтвердите в GetHTTPS
Нажмите Verify. GetHTTPS отправит проверку в Let’s Encrypt. Если TXT-запись корректна, сертификат будет выпущен.
Шаг 5: Очистка
После выпуска сертификата удалите TXT-запись _acme-challenge из вашего DNS. Она больше не нужна, и устаревшие записи могут вызвать путаницу при продлении.
Wildcard-сертификаты с DNS-01
Чтобы получить сертификат для *.yourdomain.com, вы должны использовать DNS-01. HTTP-01 не может валидировать wildcard-домены, потому что wildcard покрывает бесконечное количество имён хостов --- нет единого сервера, куда можно разместить файл.
Wildcard + основной домен: Если вы хотите и *.example.com, и example.com, GetHTTPS может потребовать две валидации. Некоторые конфигурации требуют две TXT-записи в _acme-challenge.example.com одновременно --- одну для wildcard, другую для apex-домена. Сохраняйте обе записи до завершения валидации.
Полное руководство по wildcard-сертификатам ->
DNS-01 vs HTTP-01
| DNS-01 | HTTP-01 | |
|---|---|---|
| Что нужно сделать | Добавить TXT-запись в DNS | Разместить файл на сервере |
| Необходим доступ | К настройкам DNS домена | К файловой системе веб-сервера |
| Требования к портам | Нет | Порт 80 должен быть открыт |
| Поддержка wildcard | ✅ Обязателен для wildcard | ❌ |
| Работает без сервера | ✅ | ❌ |
| Скорость | 1-15 мин (распространение DNS) | Мгновенно (если файл доступен) |
| Работает за CDN | ✅ Всегда | ⚠️ Может потребоваться обход CDN |
| Лучше всего для | Wildcard, без сервера, за CDN | Большинство сертификатов для одного домена |
Выбирайте DNS-01, когда: вам нужен wildcard, порт 80 заблокирован, ваш сервер недоступен из интернета, или вы находитесь за CDN.
Выбирайте HTTP-01, когда: у вас есть веб-сервер, порт 80 открыт, и вам не нужен wildcard. Это быстрее (нет ожидания распространения).
Устранение неполадок
TXT-запись не найдена GetHTTPS
- Подождите дольше --- у некоторых провайдеров распространение занимает 5-15 минут. Низкий TTL помогает, но не устраняет время распространения полностью.
- Проверьте имя записи: Некоторые провайдеры автоматически добавляют домен. Если вы вводите
_acme-challenge.example.com, а провайдер добавляет.example.com, фактическая запись станет_acme-challenge.example.com.example.com(неправильно). Введите только_acme-challengeи позвольте провайдеру добавить домен. - Проверьте вручную:
Если результат пустой, запись ещё не распространилась.dig TXT _acme-challenge.yourdomain.com +short
Неправильное значение / несовпадение регистра
- Значение чувствительно к регистру. Скопируйте и вставьте прямо из GetHTTPS --- не вводите вручную.
- Не добавляйте кавычки, если ваш DNS-провайдер не требует их (Route 53 требует, большинство других --- нет).
Конфликт нескольких TXT-записей
- Удалите старые TXT-записи
_acme-challengeот предыдущих попыток перед добавлением новых. - Исключение: валидация wildcard + apex может требовать две записи с одинаковым именем одновременно.
DNS-провайдер не поддерживает TXT-записи
Это редкость, но некоторые базовые DNS-сервисы не поддерживают TXT-записи. Перейдите на полнофункциональный DNS-провайдер (бесплатный план Cloudflare поддерживает все типы записей).
Когда использовать DNS-01
| Сценарий | DNS-01? |
|---|---|
Wildcard-сертификат (*.example.com) | ✅ Обязателен |
| Порт 80 заблокирован | ✅ Лучший вариант |
| Сервер во внутренней сети | ✅ Единственный вариант |
| За прокси Cloudflare/CDN | ✅ Избегает проблем с прокси |
| Домен без сервера (парковка, перенаправление) | ✅ Единственный вариант |
| Простой сертификат для одного домена с доступом к серверу | ⚠️ HTTP-01 быстрее |
Часто задаваемые вопросы
Можно ли автоматизировать DNS-01 проверки?
Да, с помощью CLI-инструментов. acme.sh имеет встроенные интеграции с API для более чем 150 DNS-провайдеров --- он может добавлять и удалять TXT-записи автоматически. Certbot поддерживает DNS-плагины для основных провайдеров. GetHTTPS требует ручных изменений DNS (в браузере, без API-вызовов).
Безопасно ли передавать ACME-клиенту мой DNS API-ключ?
API-ключ имеет доступ на запись в вашу DNS-зону, поэтому обращайтесь с ним так же, как с учётными данными сервера. По возможности используйте ограниченные API-токены (например, токены Cloudflare для конкретной зоны). Для максимальной безопасности используйте GetHTTPS с ручными изменениями DNS --- никаких API-ключей не требуется.
Как долго нужно хранить TXT-запись?
Только во время валидации --- обычно несколько минут. После выпуска сертификата удалите запись. При продлении вы создадите новую с новым значением.
Что делать, если мой DNS-провайдер медленно распространяет записи?
Установите TTL на минимально допустимое значение (в идеале 60 секунд). Если распространение занимает более 15 минут, проверьте наличие опечаток в имени/значении записи или попробуйте другой DNS-провайдер. Cloudflare распространяет TXT-записи за секунды.
Работает ли DNS-01 с прокси Cloudflare (оранжевое облако)?
Да. DNS-01 валидация запрашивает TXT-запись через DNS, а не через HTTP --- поэтому статус прокси Cloudflare (оранжевое или серое облако) не имеет значения. Это ключевое преимущество перед HTTP-01, который может быть заблокирован прокси.