Использование HTTP / 2 в Windows Server 2016 с завершением TLS / SSL

1229
Dan Atkinson

Я изучаю возможность использования Windows Server 2016 для группы веб-серверов, которые находятся за балансировщиком нагрузки, использующим разгрузку SSL.

Для меня самое большое преимущество Windows Server 2016 по сравнению с 2012 годом заключается в том, что можно использовать протокол HTTP / 2. Однако, поскольку HTTP / 2 обычно реализуется против HTTPS, я обеспокоен тем, что запросы не будут распознаваться как HTTPS, поскольку они поступают как HTTP (хотя и с x-forwarded-protoзаголовком). Я посмотрел и нашел несколько ресурсов, но конкретных доказательств не так много.

Кто-нибудь знает, будет ли IIS поддерживать эту настройку и по-прежнему отправлять ответ через HTTP / 2, или весь трафик просто вернется к HTTP / 1.1? Есть ли способ настроить / обмануть (!) IIS для использования HTTP / 2 по запросу, который может выглядеть небезопасным?

Благодарю.

Изменить: Чтобы уточнить, балансировщик нагрузки отправит x-forwarded-proto:httpsна сервер, но запрашивающее приложение видит его как небезопасный из-за разгрузки SSL.

1
Это несколько неясно. Похоже, вы хотите выполнить вызов `http:`, содержащий `X-Forwarded-Protocol: https`, и обработать его как` https: `? Это сомнительно, так как цитируемый вами ресурс говорит: «В настоящее время IIS поддерживает HTTP / 2 только через TLS». Но это должно быть достаточно легко, чтобы проверить это на виртуальной машине WS2016. harrymc 6 лет назад 0
Если Windows Server 2012 поддерживает HTTP / 2, то 2016 поддерживает его. Только TLS 1.2+ считается безопасным. В дальнейшем это единственный набор шифров, который вы должны использовать. Ramhound 6 лет назад 0
@harrymc Нет, заголовок `x-forwarded-proto` имеет значение` https`, что указывает на то, что исходным запросом является `HTTPS`. Однако когда веб-сервер увидит запрос, запрашивающий URL будет иметь протокол HTTP. Dan Atkinson 6 лет назад 0
@ Ramhound Это не правильно. Windows Server 2012 ** не ** поддерживает HTTP / 2. Он доступен только в Windows 10 и Server 2016. Вы можете увидеть список поддерживаемых платформ Windows для HTTP / 2 [здесь] (https://en.wikipedia.org/wiki/HTTP/2#Software_and_services_supporting_HTTP.2F2) Dan Atkinson 6 лет назад 0
Вы повторяете, что вы создадите URL `http:` с `X-Forwarded-Protocol: https`. Я повторяю, что это сомнительно, и только тест покажет. harrymc 6 лет назад 0
@harrymc Если мой тест не пройден, это не означает, что окончательно не существует способа сделать это, только то, что он не поддерживает его из коробки. Может быть другой способ сделать это, который мой тест не показал бы поэтому я здесь и задаю этот вопрос! Dan Atkinson 6 лет назад 0
А если это удастся? Я должен сказать, что `X-Forwarded-Protocol` выглядит как дыра в безопасности, в основном просто флаг" доверяй мне ". Возможно, вам придется отключить некоторые меры предосторожности ([пример] (https://social.msdn.microsoft.com/Forums/azure/en-US/c3861a4e-67e7-4f59-b8f9-e27e9534fa01/azure-web-app-overriding -xforwardedfor-заголовков от реверс-прокси-сервер? форум = windowsazurewebsitespreview)). harrymc 6 лет назад 1
@harrymc Простите, если я ошибаюсь, но ваш пример относится к атаке MitM, используемой с `x-forwarded-for`, и не имеет никакого отношения к` x-forwarded-proto`. Я также не уверен, что такой вектор атаки будет для этого? Пожалуйста, не могли бы вы просветить меня? Dan Atkinson 6 лет назад 0
Это был просто пример. У меня нет никакого опыта с этим, и нет абсолютно никакой документации. Вы открываете новые возможности там. harrymc 6 лет назад 0
** Ошибка ... Не ожидал увидеть это сообщение. Не берите в голову. Нет необходимости присоединяться ко мне в чате! ** Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/63333/discussion-between-dan-atkinson-and-harrymc). Dan Atkinson 6 лет назад 0

1 ответ на вопрос

1
Mike Schenk

Как указывалось в сообщении в блоге, на которое вы ссылались (и подтверждалось, когда оно превратилось в официальный документ здесь ), IIS будет использовать протокол HTTP / 2 только тогда, когда установлено соединение TLS с сервером IIS.

Как реализовано сегодня в IIS 10, HTTP / 2 идентифицируется с помощью ALPN во время квитирования TLS. Если нет ни ALPN, ни TLS, не будет HTTP / 2. Посмотрите этот доклад BUILD 2015 года, начинающийся примерно с 5'06 ", и имейте в виду, что IIS не реализует механизм обновления HTTP / 1.1 (как указано в 8'46" в видео).

В вашем сценарии это почти наверняка тот случай, когда балансировщик нагрузки установит четкие TCP-соединения и отправит HTTP / 1.1 запросы на внутренние серверы. К тому времени, когда IIS даже может увидеть x-forwarded-protoзаголовок, соединение уже установлено и протокол HTTP / 1.1 уже определен.

Теперь, возможно, ваш балансировщик нагрузки может поддерживать сам HTTP / 2, поэтому браузеры ваших конечных пользователей смогут мультиплексировать запросы и ответы с балансировщиком нагрузки, в то время как он преобразует их в запросы HTTP / 1.1 и ответы на ваши внутренние серверы. ,

Также возможно, что ваш балансировщик нагрузки может устанавливать TLS-соединения с внутренними серверами и использовать HTTP / 2, но это в большинстве случаев будет препятствовать разгрузке SSL.

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