HTTP-01 --- самый распространённый тип ACME-проверки для получения SSL-сертификата. Центр сертификации проверяет, что вы контролируете домен, запрашивая определённый файл с вашего веб-сервера по HTTP через порт 80. Это проще, чем DNS-01, но не может использоваться для wildcard-сертификатов.
Как это работает
- Let’s Encrypt предоставляет вам токен (случайную строку)
- Вы создаёте файл по адресу
http://yourdomain.com/.well-known/acme-challenge/{token} - Содержимое файла --- авторизация ключа (токен, объединённый с отпечатком ключа вашего ACME-аккаунта)
- Let’s Encrypt запрашивает этот URL из публичного интернета
- Если содержимое совпадает, проверка пройдена и ваш сертификат выпускается
С GetHTTPS шаги 1 и 3 выполняются автоматически --- вам нужно лишь разместить файл на сервере с значениями, показанными на экране.
Как разместить файл проверки
Через SSH (Linux/Nginx/Apache)
# Создайте директорию
mkdir -p /var/www/html/.well-known/acme-challenge/
# Создайте файл с точными значениями из GetHTTPS
echo "KEY_AUTHORIZATION_FROM_GETHTTPS" > /var/www/html/.well-known/acme-challenge/TOKEN_FROM_GETHTTPS
# Проверьте доступность
curl http://yourdomain.com/.well-known/acme-challenge/TOKEN_FROM_GETHTTPS
Через cPanel File Manager
- Перейдите в
public_html - Создайте папку
.well-known-> внутри неё создайте папкуacme-challenge - Создайте новый файл с именем, совпадающим с токеном
- Вставьте авторизацию ключа как содержимое файла
- Убедитесь, что права доступа 644 (файл читаем веб-сервером)
Через FTP
- Подключитесь к корневой директории сайта
- Создайте путь директорий
.well-known/acme-challenge/ - Загрузите текстовый файл с именем токена, содержащий авторизацию ключа
Настройка сервера
Некоторым веб-серверам нужна настройка для отдачи файлов из .well-known:
Nginx
# Добавьте в блок server, если .well-known возвращает 404
location /.well-known/acme-challenge/ {
root /var/www/html;
allow all;
}
Apache
Apache обычно отдаёт .well-known по умолчанию. Если нет:
Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
<Directory "/var/www/html/.well-known/acme-challenge/">
AllowOverride None
Options None
Require all granted
</Directory>
Node.js / Express
app.use('/.well-known/acme-challenge', express.static('challenges'));
Требования
- Домен должен указывать на публичный IP-адрес вашего сервера
- Порт 80 должен быть открыт --- Let’s Encrypt всегда выполняет проверку по HTTP, не по HTTPS
- Ответ должен возвращать HTTP 200 OK
- Никаких кросс-доменных перенаправлений --- перенаправления HTTP->HTTPS в пределах одного домена допускаются
- Файл должен быть доступен без аутентификации (без Basic Auth, без страницы входа)
Когда использовать HTTP-01
| Сценарий | HTTP-01? |
|---|---|
| Сертификат для одного домена | ✅ Да --- самый простой вариант |
| Сертификат для домена + www | ✅ Да --- одна проверка для каждого имени |
Wildcard-сертификат (*.example.com) | ❌ Нет --- используйте DNS-01 |
| Порт 80 заблокирован | ❌ Нет --- используйте DNS-01 |
| За прокси Cloudflare | ⚠️ Может потребоваться сначала переключить DNS на серое облако |
| Нет доступа к серверу вообще | ❌ Нет --- используйте DNS-01 (нужен только доступ к DNS) |
HTTP-01 vs DNS-01
| HTTP-01 | DNS-01 | |
|---|---|---|
| Что нужно сделать | Разместить файл на сервере | Добавить TXT-запись в DNS |
| Необходим доступ | К файловой системе веб-сервера | К настройкам DNS домена |
| Требования к портам | Порт 80 открыт | Нет |
| Поддержка wildcard | ❌ | ✅ |
| Скорость | Мгновенно (если файл доступен) | 1-15 мин (распространение DNS) |
| Работает за CDN | ⚠️ Может потребоваться обход CDN | ✅ Всегда работает |
| Лучше всего для | Большинство сертификатов для одного домена | Wildcard, без доступа к серверу, за CDN |
Устранение неполадок
Файл проверки возвращает 404
- Проверьте точный путь --- должен быть
/.well-known/acme-challenge/TOKENбез лишних слешей - Проверьте права доступа к файлу --- chmod 644
- Nginx: Ваша конфигурация может блокировать dot-файлы. Добавьте блок
location, показанный выше - cPanel: Файловый менеджер может скрывать
.well-known--- включите “Show Hidden Files”
Проверка не проходит, хотя файл доступен
- Проверьте извне вашей сети:
curl http://yourdomain.com/.well-known/acme-challenge/TOKENс другой машины или используйте онлайн-инструмент - DNS может указывать на другой сервер --- проверьте, что
dig +short yourdomain.comвозвращает IP-адрес вашего сервера - Прокси Cloudflare: Временно переключите на DNS-only (серое облако) во время валидации
Порт 80 заблокирован
Некоторые хостинги или файрволы блокируют порт 80. Варианты:
- Откройте порт 80 (хотя бы временно, для валидации)
- Перейдите на DNS-01 challenge --- не требует порта 80
- Попросите хостинг-провайдера пропустить
.well-knownчерез их прокси
Ошибка “too many requests”
Вы достигли лимитов запросов Let’s Encrypt. Подождите и повторите. Предварительная проверка GetHTTPS помогает избежать напрасных попыток, проверяя доступность файла перед отправкой.
Часто задаваемые вопросы
Можно ли удалить файл проверки после получения сертификата?
Да. Файл нужен только во время валидации. После выпуска сертификата удалите директорию .well-known/acme-challenge/ и её содержимое. При продлении вы создадите новые файлы.
Нужно ли отдавать файл по HTTPS?
Нет. Let’s Encrypt всегда выполняет проверку HTTP-01 по обычному HTTP (порт 80), даже если ваш сайт поддерживает HTTPS. Перенаправления HTTP->HTTPS в пределах одного домена допускаются, но первоначальный запрос всегда идёт по HTTP.
Можно ли использовать HTTP-01 для нескольких доменов в одном сертификате?
Да. Для каждого домена в сертификате нужен свой файл проверки. Если вы получаете сертификат для example.com и www.example.com, вы размещаете два файла --- по одному токену на домен. GetHTTPS обрабатывает их последовательно.
Что такое “предварительная проверка” в GetHTTPS?
Перед отправкой в Let’s Encrypt GetHTTPS проверяет доступность вашего файла проверки из публичного интернета (через DNS-over-HTTPS Google). Это выявляет ошибки конфигурации до того, как они потратят попытку лимита запросов --- функция, отсутствующая у других браузерных инструментов.