Почему бы не проверить самозаверяющие сертификаты через DNS-запись вместо letsencrypt


16

Мне было просто интересно. Мы используем много SSL-сертификатов. В настоящее время мы почти исключительно используем letsencrypt (спасибо!). Суть этих сертификатов заключается в том, что подтверждение права собственности на доменное имя (имена) в сертификате происходит от возможности манипулировать записями DNS или веб-сайтом в этих доменах. Доказательством DNS является добавление некоторого ключа (предоставленного letsencrypt) в виде записи TXT в DNS.

Итак, ЕСЛИ достаточно доказательств, чтобы иметь возможность изменять записи DNS для домена, почему бы не использовать самозаверяющие сертификаты с отпечатком в DNS?

Я бы сказал, что это дает точно такое же количество доверия, что и процедура letsencrypt (и других ЦС) на основе DNS:

  1. Создайте самозаверяющий центр сертификации (просто следуйте инструкциям различных инструкций)
  2. Создайте сертификат для некоторых доменов
  3. Подпишите сертификат с шага 2 с помощью CA с шага 1. Теперь у вас есть базовый сертификат, подписанный ненадежным CA
  4. Добавьте TXT (или выделенную) запись в DNS каждого из доменов, указав: мы подписали сертификат этого домена с этим CA. Например: «CA = -Fingerpint of CA-»
  5. Браузер загружает сертификат и проверяет его, сравнивая отпечаток пальца сертификата CA / CA с данными в DNS для данного домена.

Это позволило бы создавать доверенные самозаверяющие сертификаты без вмешательства третьей стороны того же уровня доверия, что и любой базовый сертификат SSL. Пока у вас есть доступ к DNS, ваш сертификат действителен. Можно даже добавить некоторое DNSSEC-подобное шифрование, сделать хэш из CA плюс SOA-запись, чтобы убедиться, что доверие исчезает при изменениях в записи DNS.

Рассматривалось ли это раньше?

Jelmer



Спасибо, Хокан! Благодаря обновлению я нашел термин DANE для этого RFC. Последняя версия RFC: tools.ietf.org/html/rfc7671 См. Также: en.wikipedia.org/wiki/… (я прочитаю позже).
Jelmer Jellema

2
«Почему нет» также рассматривается в RFC, связанном с Хоканом: без DNSSEC надежность всей модели нарушается из-за уязвимостей, присущих DNS. Следует также отметить, что DNSSEC ничего не делает для защиты трафика между клиентами и рекурсивными системами, который остается уязвимым для человека, находящегося в середине спуфинга.
Андрей Б

Эндрю, я вижу проблему с DNSSEC и MIDM, когда DNSSEC не является принудительным для домена, и принудительное выполнение может быть выполнено только в том случае, если каждый поиск выполняется путем проверки сервера корневых доменов на наличие tld. Итак, проблема в том, что мы хотим разрешить использование какого-либо DV-сертификата, указав, что владелец указывает его действительность, но мы не можем доверять DNS из-за его иерархической природы. Тот факт, что DNS уязвим для спуфинга и MIDM-атак, делает сертификаты DV своего рода внешней проверкой записи домена. Хм, я буду продолжать думать ...
Jelmer Jellema

Ответы:


18

Базовая инфраструктура, которая сделала бы это возможным, существует и называется DNS-аутентификацией именованных объектов (DANE) и указана в RFC6698 . Это работает с помощьюTLSA записи ресурса, которая указывает сертификат или его открытый ключ конечного объекта или один из его CA в цепочке (на самом деле существует четыре различных типа, подробности см. В RFC).

Принятие

Дейн, однако, еще не получил широкого распространения. VeriSign контролирует внедрение DNSSEC и DANE и отслеживает их рост с течением времени :

Развертывание TLSA по всему миру в период с 17 июня

Для сравнения, согласно данным VeriSign, существует около 2,7 миллиона DNS-зон, что означает, что чуть более 1% всех зон имеют хотя бы одну запись TLSA.

Я не могу дать никакого авторитетного ответа, почему DANE, но вот мои предположения:

DANE страдает от той же проблемы, что и списки отзыва сертификатов (CRL) и сетевой протокол статуса сертификата (OCSP). Для проверки действительности представленного сертификата необходимо связаться с третьей стороной. Ханно Бёк дает хороший обзор , почему это большая проблема на практике. Это сводится к вопросу о том, что делать, когда вы не можете связаться с третьей стороной. В этом случае поставщики браузеров предпочли мягкий отказ (иначе разрешение), что сделало все это довольно бессмысленным, и в итоге Chrome решил отключить OCSP в 2012 году.

DNSSEC

Возможно, DNS предлагает гораздо лучшую доступность, чем серверы CRL и OCSP в центрах сертификации, но все же делает невозможной автономную проверку. Кроме того, DANE следует использовать только вместе с DNSSEC. Так как обычный DNS работает по протоколу UDP, не прошедшему проверку подлинности, он весьма подвержен фальсификации, атакам MITM и т. Д. Принятие DNSSEC намного лучше, чем принятие DANE, но все еще далеко от повсеместного распространения.

И с DNSSEC мы снова сталкиваемся с проблемой мягкого сбоя. Насколько мне известно, ни одна из основных серверных / клиентских операционных систем не предоставляет проверяющий распознаватель DNSSEC по умолчанию.

Тогда есть также проблема отзыва. DNSSEC не имеет механизма отзыва и вместо этого использует недолговечные ключи.

Поддержка программного обеспечения

Все участвующее программное обеспечение должно поддерживать DANE.

Теоретически, вы можете подумать, что это будет задачей криптографических библиотек, и разработчикам приложений не придется много делать, но фактом является то, что криптографические библиотеки обычно предоставляют только примитивы, а приложения должны выполнять большую часть конфигурации и настройки самостоятельно. (и, к сожалению, есть много способов ошибиться).

Я не знаю, что какой-либо крупный веб-сервер (например, Apache или nginx), например, внедрил DANE или планирует сделать это. Веб-серверы имеют здесь особое значение, потому что все больше и больше материалов основано на веб-технологиях, и поэтому они часто являются первыми, где что-то реализуется.

Когда мы смотрим на CRL, OCSP и OCSP Stapling в качестве сравнения, мы можем сделать вывод о том, как пойдет история внедрения DANE. Только некоторые приложения, использующие OpenSSL, libnss, GnuTLS и т. Д., Поддерживают эти функции. Основному программному обеспечению, такому как Apache или nginx, потребовалось некоторое время, чтобы поддержать его, и, снова обращаясь к статье Ханно Бека, они ошиблись, и их реализация имеет недостатки. Другие крупные программные проекты, такие как Postfix или Dovecot , не поддерживают OCSPи имеют очень ограниченную функциональность CRL, в основном указывающую на файл в файловой системе (который не обязательно перечитывается регулярно, поэтому вам придется перезагрузить сервер вручную и т. д.). Имейте в виду, что это проекты, которые часто используют TLS. Затем вы можете начать смотреть на вещи, где TLS встречается гораздо реже, например, на PostgreSQL / MySQL, и, возможно, они в лучшем случае предлагают CRL.

Так что я даже не использую его на современных веб-серверах, и большинство других программ даже не имеют возможности реализовать OCSP и CRL, удачи вам с вашим пятилетним корпоративным приложением или устройством.

Потенциальные приложения

Итак, где вы могли бы использовать DANE? На данный момент не в общем Интернете. Если вы управляете сервером и клиентом, возможно, это вариант, но в этом случае вы часто можете прибегнуть к закреплению с открытым ключом.

В почтовом пространстве DANE набирает обороты, потому что SMTP долгое время не имел никакого аутентифицированного транспортного шифрования. SMTP-серверы иногда использовали TLS между собой, но не проверяли, действительно ли совпадают имена в сертификатах, теперь они начинают проверять это через DANE.


6
Я думаю, что ваше последнее предложение было отрезано.
8bittree

Спасибо, Себастьян, ваша реакция очень полезна. Пожалуйста, смотрите мои и Эндрю комментарии под ОП.
Jelmer Jellema

3
Почему веб-серверы должны это реализовывать? Я мог бы добавить самоподписанный сертификат в конфигурацию apache и сам поставить отпечаток в DNS, верно?
Jelmer Jellema

1
Существуют также проблемы производительности и масштабируемости с DNSSEC по сравнению с DNS: обычный DNS может использовать «постоянные» ответы, но DNSSEC должен выполнять криптоданс для каждого запроса, и существует множество запросов DNS. Мол, МНОГО запросов DNS.
Joker_vD

4
@Joker_vD DNSSEC подписывает данные, а не трафик. То есть, на полном конце вы можете подписать свою зону и не иметь больше «криптоданса» в течение срока действия подписей (или до тех пор, пока вы не измените данные зоны); именно на стороне валидатора (на стороне клиента) должен произойти «криптоданс» для каждого uncached-запроса. И дополнительные данные, и состояние DNSSEC соответствуют общей модели кэширования для DNS.
Хокан Линдквист

5

Различные типы процедур проверки сертификатов

С обычными сертификатами, подписанными CA, существует несколько уровней проверки сертификатов:

  • Проверка домена (DV) Подтверждено
    только право собственности на доменное имя, только имя домена отображается в сертификате как «Тема»
  • Проверка организации (OV).
    Доменное имя и имя владельца проверяются, имя домена и имя владельца отображаются в сертификате как «Тема».
  • Расширенная проверка (EV)
    Более строгая проверка сущности владельца, доменное имя и имя владельца отображаются в сертификате как «Тема», зеленая полоса с именем владельца

Процесс, который вы описываете и предлагаете замену, относится только к самому низкому уровню - проверке домена (DV).

DV - это уровень, на котором валидация относительно проста для автоматизации, например, то, что сделал LetsEncrypt, и обеспечивает уровень доверия, аналогичный тому, который мог бы обеспечить DNS, если бы он использовался в качестве единственного источника для привязки доверия (последствия пользовательского интерфейса, может свидетельствовать быть доверенным, но содержать дополнительные данные, которые никоим образом не проверены).

DNS-аутентификация именованных объектов (DANE)

DANE основывается на DNSSEC (поскольку аутентификация данных DNS имеет решающее значение) для публикации информации о доверии для клиентов TLS в DNS.

Он использует TLSAтип RR и может использоваться для идентификации либо сертификата, либо открытого ключа ( селектора ) либо конечного объекта, либо ЦС, с требованием или без того, чтобы регулярная проверка цепочки сертификатов также требовала успеха ( использование сертификата ) и как сертификат / данные ключа представлены в записи ( соответствующий тип ).

TLSAИмя владельца запись имеет префикс , который указывает порт и протокол (например _443._tcp) и RDATA указывает cert usage, selectorи matching typeрежимы в дополнение к CERT / ключевые данные , чтобы соответствовать. См. Раздел 2.1 RFC6698 для ознакомления со спецификой этих параметров.

Например, TLSAзапись может выглядеть так:

_443._tcp.www.example.com. IN TLSA  2 0 1 d2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971

В режимах использования 2или 3(указывает на использование только привязки доверия TLSA) клиент, поддерживающий DANE, будет принимать сертификат, который не подписан обычно доверенным центром сертификации, но который соответствует TLSAзаписи.
Концептуально это то же самое, что вы предлагаете в своем вопросе.

Подвох? Клиенты, поддерживающие DANE, в настоящее время более или менее не существуют, одной из проблем является то, что сам DNSSEC не так широко развернут (особенно проверка на клиентском компьютере), как то, что, вероятно, потребуется для запуска DANE. Скорее всего, это будет проблемой, если учесть, что DANE - один из первых потенциально больших новых сценариев использования, основанных на аутентифицированных данных DNS.

Существует плагин для браузера, который добавляет проверку DNSSEC и DANE , за исключением того, что на данный момент не так много всего, что находится рядом с мейнстримом. И, будучи плагином, а не изначально поддерживаемым, он служит больше как подтверждение концепции, чем что-либо еще, когда дело доходит до общего использования.


Это может быть сделано. Это было рассмотрено. Это все еще может произойти, но не было много движения.


Спасибо, Хокан. Как указывает Эндрю в моем ОП, существует проблема с DNS и DNSSEC, так как DNSSEC не принудительно (даже если ключи находятся на месте в DNS TLD, я полагаю), DNS-серверы на этом пути могли бы подделать информацию DANE. , право? Поэтому DNSSEC должен быть обязан, чтобы записи DANE были действительными, что, в свою очередь, означает, что каждая проверка должна также проверять ключи на сервере TLD.
Jelmer Jellema

5
@JelmerJellema Как я отмечал в своем ответе, DNSSEC должен быть проверен на клиенте (не проблема, на которую указал Эндрю), и могут использоваться только успешно проверенные подписанные записи TLSA. Эта проблема, о которой вы говорите, не является проблемой с точки зрения дизайна, это проблема с точки зрения поддержки в основном программном обеспечении.
Хокан Линдквист

2
Хотя это и не идеально, все больше и больше рекурсивных серверов имен у интернет-провайдеров или открытых, таких как 8.8.8.8 или 9.9.9.9, делают проверку DNSSEC. dnssec-триггер, построенный на несвязанных и / или таких вещах, как stubby, позволил бы иметь полную проверку DNSSEC на клиентах без необходимости полной проверки DNS-распознавателя на клиенте. Но мы действительно далеки от этого ...
Патрик Мевзек
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.