Тестирование Связующие записи DNS для скрытых серверов имен, которые еще не работают

Как мне протестировать клеевые записи для сервера имен, который еще не работает?

Я более чем счастлив тестировать клеевые записи для доменов, которые являются live.

Однако на этот раз мы только начали развертывание большого количества новых серверов имен. Пока мы склеили записи через регистратора ' s Я изо всех сил пытаюсь найти способ протестировать клеящие записи без фактического назначения их домену. Возможно ли это?

Для пояснения с использованием реальных данных (на момент написания) ...

Один из наших текущих серверов имен - ns12.dogsbodyhosting.net. поэтому запускаем dig -ta @ g.gtld-servers.net. ns12.dogsbodyhosting.net. правильно сообщает нам, что g.gtld-servers.net. не могу дать в качестве ОТВЕТА, но ВЛАСТЬ, с которой нам нужно поговорить, - это ns12.dogsbodyhosting.net. и ДОПОЛНИТЕЛЬНАЯ (связующая) информация, которая нам нужна для записей A и AAAA. Все хорошо: -)

Проблема: Мы только что создали ns12.dogsdns.net. (а также около 40 других новых серверов имен) и хочу проверить, что это клей для ns12.dogsdns.net. существует на г. gtld-servers.net. и другие серверы .net . Однако при запуске dig -ta @ g.gtld-servers.net. ns12.dogsdns.net. показывает нам только связующие записи для старого DNS, в настоящее время сопоставленные с этим доменом, а не связующие для ns12.dogsdns.net. что мы ищем.

Чтобы повторить; Мы создали связующие записи через регистратора, но не имеем возможности узнать, сделал ли регистратор что-нибудь или допустили ли мы опечатку при вводе всех записей. Итак, как мы можем протестировать эти связующие записи, не запуская домен и надеясь?

Даже если бы мы настроили записывающий домен с использованием новых серверов имен, мы не смогли бы добавить все 60 серверов имен в один домен.

Заранее благодарим вас за любые ответы. У меня есть два серверных блока вроде следующего: server {listen 443 ssl http2; имя_сервера ...

Я только начал изучать nginx и SSL и уже давно не захожу в разные конфигурации. У меня есть два серверных блока вроде следующего:

server{
    listen 443 ssl http2;
    server_name www.a.com;
    ssl_certificate a.crt;
    ssl_certificate_key a.key;
    ....
}
server{
    listen 443 ssl ;
    server_name www.b.com;
    ssl_certificate b.crt;
    ssl_certificate_key b.key;
    ....
}

После подключения к nginx через openssl s_client с использованием www.a.com в качестве SNI я отправил запрос GET с помощью Host: www.b.com, и он все еще работает. Ожидается ли это? Может ли кто-нибудь помочь мне понять поведение nginx?

1
задан 17 April 2018 в 02:49
1 ответ

HTTP-соединение - это просто TCP-соединение в конце дня. Таким образом, приведенное выше на самом деле подходит для HTTP-соединений (т.е. если вы подключаетесь к www.a.com, вы фактически подключаетесь к IP-адресу, а не к www.a.com, поэтому на самом деле это нормально и ожидается, что это соединение сможет адресные запросы для www.b.com).

Для HTTPS, как вы говорите, вы используете, он немного менее ясен ...

Для HTTP / 1.1 нет ничего в HTTP Over TLS RFC или Протокол передачи гипертекста (HTTP / 1.1): RFC синтаксиса сообщений и маршрутизации , чтобы указать, как это должно обрабатываться, поскольку SNI является необязательным расширением HTTP, добавленным после (в Фактически, помимо этого, это был один из способов обойти клиентов - например, IE8 в XP - если один и тот же сертификат используется для обоих виртуальных хостов, то соответствующее соединение может быть использовано после согласования сеанса TLS на основе этого сертификата, предоставленного хост по умолчанию). Однако в SNI RFC четко указано, что сервер ДОЛЖЕН проверять, что это такое же , поэтому, когда имя сервера указано и отличается от хоста, то, что вы наблюдаете, неверно (спасибо Майклу Хэмптону за указание на это из-за того, что я пропустил это изначально).

HTTP / 2 более ясен в этом и фактически допускает повторное использование соединения в определенных условиях, и говорит следующее :

Соединение может быть повторно использовано как пока исходный сервер авторитетный (раздел 10.1). Для TCP-соединений без TLS это зависит от того, разрешил ли хост один и тот же IP-адрес.

Для ресурсов https повторное использование соединения дополнительно зависит от наличия сертификат, действительный для хоста в URI. Сертификат представленный сервером ДОЛЖЕН соответствовать любым проверкам, которые клиент выполнять при формировании нового соединения TLS для хоста в URI.

Исходный сервер может предложить сертификат с несколькими атрибуты subjectAltName или имена с подстановочными знаками, один из которых действителен для органа в URI. Например, сертификат с subjectAltName из * .example.com может разрешать использование того же соединение для запросов к URI, начинающимся с https://a.example.com/ и https://b.example.com/ .

Таким образом, если a.crt также включает в себя включение www.b.com в поле «Альтернативное имя субъекта», то указанное выше действительно нормально для HTTP / 2, правда, не под HTTP / 1.1.

Однако, на всякий случай, я повторил ваши наблюдения, когда a.crt определенно НЕ покрывает www.b.com, и это действительно звучит как ошибка, а также потенциально угроза безопасности, как запрос на один виртуальный хост может быть прочитан другим виртуальным хостом (несмотря на то, что у него нет доступа к ключу, с помощью которого было расшифровано сообщение), если кто-то смог ввести недопустимый заголовок хоста (что, к счастью, с браузерами сделать нелегко, поэтому, по общему признанию, я не могу это продемонстрировать) . Это может привести к утечке файлов cookie или другой информации на вторичный сервер.

Я сообщил об этом команде безопасности nginx, которая сказала, что это не недостаток безопасности nginx, и что клиент должен проверять сертификаты, а затем не отправлять искаженные запросы хостам, к которым они должны получать доступ через это соединение. Я категорически не согласен с этим и говорю, что весь смысл HTTPS в том, чтобы разрешать только действующим конечным точкам расшифровывать сообщения! Поэтому я думаю, что проверка должна выполняться как на стороне клиента , так и на стороне сервера, и на самом деле именно этот сценарий обсуждался рабочей группой TLS в то время, когда SNI был конкретным, поэтому формулировка выше был добавлен в RFC . Кроме того, группа безопасности nginx заявляет, что в этом сценарии nginx должен быть настроен с общим сертификатом для обоих хостов (что для меня не имеет смысла, так как сильно ограничивает полезность виртуального хостинга в nginx!), Но если оператор сервера nginx действительно хочет ограничить это, тогда они могут сделать это, проверив переменную $ ssl_server_name (что для меня означает, что это относительно простая проверка, которую nginx может выполнять по умолчанию!). В любом случае, это их программное обеспечение, и они имеют право на свое мнение, но я не согласен.

Также отмечалось, что этот метод иногда используется для предотвращения цензуры в процессе, известном как Domain Fronting . Что достаточно справедливо, но я думаю, что это должно быть явно включено, а не разрешено по умолчанию.

Между прочим, Apache не делает то же самое и (правильно ИМХО) возвращает "400 Bad Request" до 2.4.17 и нового " 421 (неверный запрос) "после 2.4.17 - , который был новым кодом состояния HTTP, созданным специально для этого сценария .

5
ответ дан 3 December 2019 в 17:02

Теги

Похожие вопросы