
Я использую Wireshark для анализа веб-трафика.
Когда я открываю свой веб-браузер и ввожу адрес: stackexchange.com, он сначала выполняет DNS-запрос, получает ответ, а затем отправляет пакет TCP Syn на нужный IP-адрес через порт 80.
Но когда я ввожу www.paypal.com, происходит то же самое, но пакет TCP Syn отправляется непосредственно на порт 443.
Похоже, ответ DNS не содержит порт назначения, и между моим браузером и целевым сайтом не происходит никакого согласования протокола.Как мой браузер узнает порт назначения?
Обратите внимание, что я не печатаюhttp://stackexchange.comилиhttps://www.paypal.com, а просто stackexchange.com и www.paypal.com.
решение1
Ваш браузер запоминает порт и протокол из предыдущего взаимодействия с сайтом.
Paypal использует HTTP Strict Transport Security. Это означает, что сервер отправил (возможно, через порт 80) заголовок ответа, включая его, Strict-Transport-Security:max-age=63072000
еще до того, как вы начали искать. Возраст отображается в секундах. Таким образом, в течение следующих двух лет после посещения порта 80 браузеру не нужно снова обращаться к порту 80; он должен обращаться к порту 443. Фактически, последующие посещения порта 443 получат ту же инструкцию, поэтому она применяется неограниченно долго для людей, которые используют Paypal каждый год.
Это улучшение по сравнению с предыдущей схемой, где каждый запрос на порт 80 получал перенаправление на порт 443, который был медленнее. Использование перенаправлений также было менее безопасным, поскольку браузер не будет возражать, если Paypal (или, скорее, злоумышленник MITM, выдающий себя за Paypal) внезапно перейдет с HTTPS на HTTP, если использует перенаправления. В HTTP Strict Transport Security такой тип атаки будет гораздо более заметным, поскольку злоумышленник будет вынужден использовать HTTPS для связи с браузером, но у него нет доступа ни к одному сертификату сервера HTTPS, выданному Paypal.
решение2
Браузер обычно сначала пробует HTTP, а затем перенаправляется на HTTPS. Это распространенный случай, но не единственный.
Chrome и Firefox поддерживают идеюСтрогая безопасность транспорта HTTPСписки предварительной загрузки, представляющие собой списки сайтов, с которыми следует связываться только по протоколу HTTPS, даже если на них ссылаются с помощью URL-адреса HTTP.
Более подробную информацию можно найтиздесь.
решение3
Google Chrome, Mozilla Firefox и Internet Explorer/Microsoft Edge устраняют это ограничение, реализуя «предварительно загруженный список HSTS», который представляет собой список, содержащий известные сайты, поддерживающие HSTS. Таким образом, запрос из вашего браузера отправляется на соответствующий настроенный домен сервера HSTS напрямую по https.
В противном случае должен был бы быть http-запрос, и серверу пришлось бы перенаправить на https (в случае HSTS сервер отвечает заголовком - используйте только HTTPS: Strict-Transport-Security: max-age=31536000).
решение4
Веб-браузер всегда будет запрашивать порт 80, поэтому после того, как все службы SSL обслужат его серверную часть, когда клиент подключается к вашей службе, сервер перенаправляет соединение на защищенное соединение или «https».