HTTP-01 и DNS-01: какой способ проверки выбрать
Практическое руководство: HTTP-01 и DNS-01: какой способ проверки выбрать. Подготовка, команды, проверка, безопасность и откат.
Задача и общий подход
Материал посвящён теме «HTTP-01 и DNS-01: какой способ проверки выбрать» с акцентом на логике работы и взаимосвязи компонентов.
Наличие сертификата не гарантирует правильный HTTPS. Важны цепочка доверия, соответствие имени, срок действия, выбранный сертификат на порту и автоматическое продление.
Практический порядок одинаков для любой рабочей системы: зафиксировать исходное состояние, создать резервную точку, изменить один компонент, проверить результат и только затем переходить дальше.
Когда применять этот порядок
Этот сценарий подходит для следующих ситуаций:
- плановое внедрение или перенос компонента категории «TLS и сертификаты» на новый VPS
- изменение портов, домена, сертификата, маршрута или способа публикации сервиса
- разбор инцидента, когда локальная и внешняя проверки дают разные результаты
- подготовка к обновлению пакета или восстановлению после неудачного изменения
Подготовка перед изменениями
Подготовительный этап снижает риск потерять доступ и смешать несколько причин одной неисправности.
- Зафиксируйте текущие порты, процессы и состояние службы.
- Проверьте свободное место, DNS и системное время.
- Откройте вторую административную сессию и не закрывайте текущую.
- Подготовьте команду отката до применения изменений.
- Сохраните копии изменяемых файлов с датой и временем.
Как устроена схема
Клиент устанавливает TCP-соединение, передаёт SNI и согласует TLS до обычного HTTP-запроса. HTTP-01 требует доступного порта 80, DNS-01 подтверждает управление DNS-зоной и подходит для wildcard.
Важно разделять конфигурацию, процесс, сетевой сокет и внешний запрос. Успех на одном уровне не доказывает исправность следующего.
Пошаговая настройка
Выполняйте блоки последовательно и после каждого шага проверяйте код возврата команды.
DNS и порты
dig +short A example.org
ss -lntp | grep -E ':(80|443)\b'
curl -I http://example.org/Домен должен указывать на нужный сервер, а challenge быть доступен.
Таймер
systemctl list-timers --all | grep -i certbot
journalctl -u certbot.timer -n 50 --no-pagerИмя юнита зависит от способа установки.
Локальный сертификат
sudo openssl x509 -in /etc/letsencrypt/live/example.org/fullchain.pem -noout -subject -issuer -datesПоказывает имя, издателя и срок действия файла.
Сертификат на порту
echo | openssl s_client -connect example.org:443 -servername example.org 2>/dev/null | openssl x509 -noout -subject -issuer -datesПроверяется сертификат, который реально видит клиент.
Тест продления
sudo certbot renew --dry-runВыявляет большинство проблем до истечения срока.
Имена доменов, адреса, порты и пути в примерах условные. Перед выполнением замените их фактическими значениями.
Проверка результата
Проверка должна охватывать конфигурацию, процесс, listener и реальный запрос.
- DNS актуален
- сертификат содержит имя
- цепочка полная
- системное время корректно
- dry-run успешен
Универсальная проверка
systemctl is-active SERVICE
systemctl status SERVICE --no-pager
journalctl -u SERVICE -n 80 --no-pager
ss -lntupЗамените SERVICE и сохраните вывод рядом с резервной копией.
Безопасность
После получения рабочего результата уменьшите количество исключений и временных разрешений.
- ограничивайте административный доступ доверенными IP или VPN
- не храните секреты в публикуемых конфигурациях и журналах
- используйте принцип минимально необходимых прав
- просматривайте журналы аутентификации и ошибки запуска
- закрывайте временные порты после завершения теста
Диагностика, если не заработало
Диагностика строится как последовательное исключение уровней, а не случайный набор перезапусков.
- Подтвердите симптом точной командой и запишите время.
- Проверьте конфигурацию штатным тестом.
- Проверьте процесс и последние записи журнала.
- Убедитесь, что нужный адрес и порт слушаются.
- Сравните локальный запрос с запросом извне.
- Только затем проверяйте firewall, DNS и маршрут.
- Меняйте одну переменную и повторяйте тот же тест.
Для темы «HTTP-01 и DNS-01: какой способ проверки выбрать» важно не путать открытый firewall с запущенным сервисом: правило доступа не создаёт listener, а активный процесс не гарантирует доступность извне.
Дальнейшее сопровождение
Рабочая конфигурация со временем устаревает и требует контроля.
- периодически выполняйте тестовое восстановление
- проверяйте журналы ошибок и их размер
- контролируйте таймеры, сертификаты и автоматические задания
- после обновления повторяйте тест конфигурации и портов
- храните резервную копию вне VPS
Типичные ошибки
Чаще всего восстановление усложняют следующие действия:
- изменение нескольких компонентов одной командой без промежуточных тестов
- игнорирование различий правил IPv4 и IPv6
- проверка только локального подключения без внешнего теста
- удаление рабочей конфигурации до успешного запуска новой
- использование устаревшей команды без проверки версии пакета
- открытие административного порта для всего интернета
Откат изменений
Откат выполняется в обратном порядке и с теми же проверками, что использовались после настройки.
- вернуть прежние пути сертификата
- проверить права ключа
- выполнить nginx -t
- перезагрузить и повторить openssl-проверку
Не удаляйте неудачную конфигурацию до выяснения причины: она полезна для diff и разбора инцидента.
Контрольный список
Перед тем как считать тему «HTTP-01 и DNS-01: какой способ проверки выбрать» закрытой, пройдите список:
- создана резервная копия
- проверка синтаксиса проходит
- служба active
- порт слушается на правильном интерфейсе
- локальный и внешний тесты успешны
- в журналах нет новой критической ошибки
- порядок отката записан
- временные правила удалены
Что дополнительно сверить в документации
При подготовке материала были сопоставлены разделы русскоязычной документации. Для углублённой проверки полезно изучить:
- Настройка HTTPS-серверов
- Как развернуть свой веб-сайт в облаке с помощью Next.js, Django, SSL, DNS
- План действий
- Необходимые требования
- VDS и VPS
- Настройка сервера
- Установка нужного комплекта программ
- Настройка безопасности
Повторная проверка после restart или перезагрузки
Часть настроек работает только в текущем процессе или до следующего reload. После успешного первичного теста повторите проверку после штатного restart, а для критичной инфраструктуры — после плановой перезагрузки сервера в окно работ.
Сравните автозапуск, владельцев файлов, постоянные правила firewall, DNS и фактический listener. Это выявляет зависимость от ручной команды, временного файла или правила, которое не сохраняется.
Сертификат на порту
echo | openssl s_client -connect example.org:443 -servername example.org 2>/dev/null | openssl x509 -noout -subject -issuer -datesПроверяется сертификат, который реально видит клиент.
Финальная проверка с точки зрения реального клиента
Последнюю проверку темы «HTTP-01 и DNS-01: какой способ проверки выбрать» выполняйте тем же способом, которым сервисом будет пользоваться человек или приложение: с нужным доменом, протоколом, учётной записью и внешней сетью. Локальная команда остаётся диагностическим этапом, но не заменяет прохождение всей цепочки.
После успешного ответа ещё раз просмотрите журнал и убедитесь, что запрос попал в ожидаемый компонент, не создал скрытую ошибку и не использовал старый кэш. Результат и время проверки полезно сохранить рядом с резервной точкой.
Тест продления
sudo certbot renew --dry-runВыявляет большинство проблем до истечения срока.
Локальная и внешняя точка наблюдения
Локальный запрос исключает часть сети и полезен для проверки процесса. Внешний запрос добавляет публичный маршрут, firewall, DNS и TLS. Оба результата нужны одновременно.
При расхождении двигайтесь от сервера наружу, проверяя каждый переход отдельно.
Права на закрытый ключ и применение сертификата
Закрытый ключ не должен быть доступен обычным пользователям или публиковаться в архиве сайта. Одновременно служба должна иметь возможность прочитать файл через весь путь каталогов.
После изменения путей выполните штатный тест конфигурации и reload. Затем повторно снимите сертификат с публичного порта: наличие нового файла на диске ещё не означает, что сервис использует его.
Проверить файлы и путь
sudo namei -l /etc/letsencrypt/live/example.org/privkey.pem
sudo openssl x509 -in /etc/letsencrypt/live/example.org/fullchain.pem -noout -dates
sudo nginx -tНе выводите содержимое закрытого ключа в терминал или журнал.
Источники и документация
Источники использованы для выбора терминов, контрольных вопросов и команд. Полные абзацы чужих публикаций не копируются.