Проверка DNSSEC
Введите домен, и мы пройдем по цепочке его подписей вниз от корневой зоны. Вы узнаете, подписан ли домен, подписан и действителен, настроен наполовину или сломан, и какую запись нужно исправить.
Какую брешь закрывает DNSSEC
Когда ваш компьютер спрашивает «какой адрес у example.com?», ответ приходит небольшим незащищенным пакетом. Исходный DNS не дает получателю никакой возможности проверить, кто его написал. Тот, кто находится между вами и сервером имен, или тот, кто подсунет поддельный ответ в память резолвера, может отправить посетителей и почту на машину по своему выбору.
DNSSEC добавляет подписи. Владелец зоны подписывает каждый набор записей закрытым ключом и публикует соответствующий открытый ключ в зоне в виде записи DNSKEY. Резолвер, получивший ответ, получает и его подпись (RRSIG) и может проверить, что записи в точности те, что опубликовал владелец. DNSSEC ничего не шифрует и не скрывает, какие имена вы запрашиваете. Он только доказывает, что ответ подлинный.
Цепочка отпечатков
Открытый ключ, лежащий там же, где и данные, мало что доказывает: подделыватель может заменить и то и другое. Поэтому каждая зона просит вышестоящую зону поручиться за нее. Родительская зона публикует запись DS, короткий отпечаток (дайджест) ключа дочерней зоны, и подписывает эту запись своим ключом. За ключ родителя так же ручается его собственный родитель, и так до самой корневой зоны. Корневой ключ единственное, что резолвер должен знать заранее, и он поставляется вместе с программой резолвера.
Для example.com путь выглядит так: корневой ключ, DS для com в корне, ключи com, DS для example.com в com, ключи example.com, подписанные записи. Одно отсутствующее или неверное звено, и доказательство не проходит.
Запись DS единственная часть, которая живет за пределами вашего DNS-хостинга. Она передается в реестр через вашего регистратора, и большинство сбоев происходит именно из-за этого разделения.
Что делает эта проверка
Для корня, зоны верхнего уровня и каждой зоны вниз до вашего домена наш сервер читает записи DS у родителя и записи DNSKEY самой зоны. Он читает их через публичные резолверы с выключенной валидацией (флаг «checking disabled»), чтобы можно было изучить и сломанную зону. Для каждого ключа он вычисляет key tag, а для каждой DS заново вычисляет дайджест ключа той же хеш-функцией (RFC 4034) и сравнивает их побайтно.
Затем он запрашивает у трех валидирующих публичных резолверов (Cloudflare, Google и Quad9) запись SOA домена, на этот раз с включенной валидацией. Резолвер, который проверил ответ, ставит флаг AD («authenticated data»). Резолвер, нашедший ошибку, отвечает SERVFAIL. Отпечатки наш сервер сверяет сам, но подписи не проверяет. Этот вердикт выносят резолверы.
| Вердикт | Что найдено | Последствия |
|---|---|---|
| Не подписан | Нет DS, нет DNSKEY | Работает везде, ответы проверить нельзя. Так у большинства доменов. |
| Подписан и действителен | DS совпадает с ключом, резолверы ставят AD | Валидирующие резолверы отвергают поддельные ответы. |
| Настроен наполовину | DNSKEY есть, DS нет | Работает, но подписи никто не проверяет. |
| Сломан | DS без подходящего ключа или SERVFAIL только при включенной валидации | Недоступен для всех, кто стоит за валидирующим резолвером. |
Проверка также отмечает устаревшие или слабые алгоритмы (RSA/MD5, DSA, RSA/SHA-1, дайджесты SHA-1 в DS), DS, оставшуюся от старого ключа, подписи, срок действия которых истекает в ближайшие три дня, и то, чем зона доказывает отсутствие имени: NSEC или NSEC3.
Как починить сломанную цепочку
Сломанная цепочка хуже, чем полное отсутствие DNSSEC: валидирующие резолверы отказываются отвечать. Обычно все происходит так: домен переехал на новый DNS-хостинг, старая запись DS осталась у регистратора и теперь указывает на ключ, которого больше нет.
- Чтобы быстро вернуться в строй, удалите запись
DSу регистратора. Домен станет неподписанным и заработает для всех, когда истекут кэши, обычно в течение суток. - Чтобы сохранить DNSSEC, откройте страницу DNSSEC у вашего текущего DNS-хостинга, скопируйте показанную там запись
DS(key tag, алгоритм, тип дайджеста, дайджест) и введите ее у регистратора вместо старой. - Перед следующим переездом сначала удалите запись
DS, подождите сутки, смените серверы имен, затем подпишите зону и опубликуйте новуюDS.
Если домен «настроен наполовину», либо доведите дело до конца и опубликуйте запись DS, либо отключите подпись у DNS-хостинга.
Резолверы хранят ответы, в том числе ошибки, столько, сколько позволяет TTL записи. Сразу после исправления эта страница какое-то время может показывать старое состояние, а разные резолверы могут расходиться во мнениях.
Частые вопросы
Нужен ли DNSSEC моему домену?
Это необязательно, и большинство доменов живут без него. Он защищает посетителей и почту от поддельных ответов DNS, а некоторые технологии его требуют, например DANE для почтовых серверов. Если ваш DNS-хостинг и регистратор включают его одним переключателем, включить его почти ничего не стоит. Если вы часто меняете DNS-хостинг, планируйте каждый переезд внимательно.
Чем запись DS отличается от записи DNSKEY?
DNSKEY это открытый ключ, который ваш DNS-хостинг публикует в вашей собственной зоне. DS это отпечаток этого ключа, опубликованный в родительской зоне (.com, .org) через вашего регистратора. Именно DS привязывает вашу зону к цепочке.
Почему мой сайт открывается у меня, но не у других?
Если DNSSEC сломан, все зависит от резолвера каждого посетителя. Резолверы, которые проверяют подписи (Google, Cloudflare, Quad9, многие крупные провайдеры), возвращают ошибку. Резолверы без проверки по-прежнему отвечают. Запустите проверку. Вердикт «сломан» с пометкой «валидация выключена: отвечает» описывает именно эту ситуацию.
Что такое KSK и ZSK?
Это две роли ключей в зоне. Ключ подписи ключей (KSK, флаг 257) подписывает только набор ключей, и именно на него указывает запись DS. Ключ подписи зоны (ZSK, флаг 256) подписывает все остальные записи, и его можно заменить, не обращаясь к регистратору. Некоторые хостинги используют один ключ для обеих ролей.
Какой алгоритм DNSSEC выбрать для зоны?
Алгоритм 13 (ECDSA P-256 с SHA-256) сегодня самый распространенный выбор: короткие подписи и широкая поддержка. Алгоритм 8 (RSA с SHA-256) тоже подходит. Алгоритмы 5 и 7 опираются на SHA-1, их стоит заменить. Алгоритмы 1, 3, 6 и 12 выведены из употребления.
Сколько времени нужно, чтобы изменение DNSSEC стало видно?
У большинства регистраторов изменение DS доходит до реестра за несколько минут, но резолверы хранят прежнюю DS в течение ее TTL, для .com часто 24 часа. Подождите полные сутки, прежде чем оценивать результат.