<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Здравствуйте!</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Я прошу прощения за осознанный оффтопик. Но, к сожалению, я вряд ли где еще найду столько людей понимающих как работает SPDY и HTTP/2, чем тут. К тому же проблема косвенно затрагивает конфигурирование nginx и, когда IPv6 станет более массовым с проблемой столкнется, мне кажется, большинство присутствующих.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Некоторое время назад я обнаружил и зарепортил следующий баг: https://bugzilla.mozilla.org/show_bug.cgi?id=1190136</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Выглядело это как будто, обращаясь к одному виртуалхосту, я получаю контент другого.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Конкретно понимание проблемы пришло тут https://bugzilla.mozilla.org/show_bug.cgi?id=1190136#c22 .</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Как вопроизвести, описано тут https://bugzilla.mozilla.org/show_bug.cgi?id=1190136#c19</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Если кратко, то при использовании SPDY\HTTP/2 (для краткости SPDY) Firefox, начиная с вот этого коммита (https://hg.mozilla.org/mozilla-central/rev/5d7317e09ea1) принимает решение о повторном использовании соединения с виртуалхостом по протоколу IPv6 на основании совпадения адреса в A-записи при условии использования обоими wildcard-сертификата валидного для обоих виртуалхостов.</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">То есть</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">У нас есть домен example.com и сертификат *.example.com. На сервере и на клиентах должен быть функционирующий IPv6 (я на клиентах использую туннельного брокера).</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">1) Заводим два субдомена (например aaa.example.com и bbb.example.com), указывающих на одинаковый ipv4 адрес (A-запись) и разные ipv6 адреса (AAAA-запись)</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2) В заводим два виртуальных хоста, можно на одном сервере, можно на разных. Главное, чтоб у них использовались субдомены из п.1, сертификат *.example.com, и IPv6 адреса соотвествовали AAAA-записям из п.1. IPv4 адреса тут не важны.</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3) Пытаемся загрузить https://a.example.com. Файрфокс присылает запрос на правильный IPv6 адрес, проставляя правильное поле Host в запросе.</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">4) Пытаемся загрузиться https://b.example.com, файрфокс будет повторно использовать соединение из п.3, основываясь на том, что оба субдомена имеют одну и ту же A-запись. И пошлет запрос на IPv6 адрес первого домена, передав в заголовке Host адрес второго домена.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Разработчик, отвественный за эту часть броузера сказал, что это не баг и чинить он его не будет. Посоветовав использовать разные сертификаты для разных субдоменов (а не wildcard) или пользоваться http-ответом с кодом 451.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Однако я с этим в корне не согласен, более того, считаю, что такое поведение открывает уязвимость, которую я описал тут:</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">https://bugzilla.mozilla.org/show_bug.cgi?id=1190136#c22</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Но технической квалификации и политического веса в мире броузеров и серверов мне не хватает. Так же мало кто используется ipv6 на клиенте, поэтому массовка еще набралась.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Что я хочу, написав, это письмо здесь?</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">1) Оцените, пожалуйста, насколько я прав. Может быть все не так, как мне кажется?</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Дальше только, если я прав.</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2) Помогите найти аргументы для убеждения разработчиков ФФ, что этот баг надо исправлять. Если кто готов отписаться там, я открою обратно этот баг.</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3) Может быть как-то можно сконфигурировать nginx, чтобы решить эту проблему, кроме использования раздельных сертификатов для поддоменов? Ибо раздельные сертификаты - не всегда возможно.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Спасибо за помощь. </p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">С уважением, Иван Прокудин.</p></body></html>