Проверка DNSSEC

Введите домен, и мы пройдем по цепочке его подписей вниз от корневой зоны. Вы узнаете, подписан ли домен, подписан и действителен, настроен наполовину или сломан, и какую запись нужно исправить.

Введите сам домен, например example.com. Начальное www. игнорируется.

Или попробуйте cloudflare.com, ietf.org, dnssec-failed.org

Какую брешь закрывает 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 осталась у регистратора и теперь указывает на ключ, которого больше нет.

  1. Чтобы быстро вернуться в строй, удалите запись DS у регистратора. Домен станет неподписанным и заработает для всех, когда истекут кэши, обычно в течение суток.
  2. Чтобы сохранить DNSSEC, откройте страницу DNSSEC у вашего текущего DNS-хостинга, скопируйте показанную там запись DS (key tag, алгоритм, тип дайджеста, дайджест) и введите ее у регистратора вместо старой.
  3. Перед следующим переездом сначала удалите запись 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 часа. Подождите полные сутки, прежде чем оценивать результат.