Как мне протестировать клеевые записи для сервера имен, который еще не работает?
Я более чем счастлив тестировать клеевые записи для доменов, которые являются 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?
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, созданным специально для этого сценария .