Попросили рассказать об SNI подробнее.Все ведь понимают, что на одном веб-сервере с одним IP-адресом может размещаться любое количество сайтов?
Эта возможность называется "виртуальные хосты" и существует благодаря заголовку Host в HTTP-запросах. Сервер понимает по этому заголовку, какой контент нужно отдать браузеру.
О хитрости с заголовком Host при использовании https, которая называется domain fronting, я уже писала (
t.me/theyforcedme/51) в статье про магию Telegram. Сейчас не об этом.
Дело в том, что когда вы обращаетесь к сайту по https, все запросы,
включая заголовки, заворачиваются в протокол TLS и шифруются. Проверка подлинности при этом осуществляется с помощью сертификатов SSL, которые привязываются к доменным именам. После рукопожатия и установления шифрованного соединения, третьи стороны не могут понять, что именно вы передаёте и получаете в запросах. Секурити!
Как же быть, если на одном сервере несколько виртуальных хостов? Например, веб-сервер имеет адрес
185.88.181.6, а на нём крутятся сайты
vk.com,
2ch.hk,
fsb.ru, каждый из которых работает по https. Так как сертификаты привязываются к доменам, у каждого сайта будет свой, поэтому сервер должен как-то понять, какой сайт хочет пользователь.
Заголовок Host здесь не подходит, его сервер получит только после рукопожатия и установления зашифрованного соединения. Значит нужно сообщить серверу о нужном нам домене прямо в процессе рукопожатия. Для этого и был придуман апгрейд протокола TLS, называющийся Server Name Indication, SNI.
Проще говоря, ваш браузер, стучась на сервер, сразу говорит ему, что хочет получить сертификат для домена, например,
2ch.hk, передавая доменное имя в поле SNI.
Беда здесь в том, что происходит это в открытом виде, шифрование ведь ещё не установилось. А значит, операторы связи могут с помощью DPI перехватить это поле и выяснить, куда стучится пользователь, несмотря на то, что он планирует использовать защищённый канал. И если, например, государство считает сайт запрещённым, оператор может оборвать соединение.
Таким образом, операторы и прочие третьи лица могут:
а) получать информацию о том, на какие https-сайты ходит пользователь, несмотря на то, что получить содержимое запросов они не могут
б) блокировать соединения с конкретными доменами. Например,
2ch.hk можно заблокировать, а
vk.com и
fsb.ru останутся доступны.
Дальше напишу про SNI Encryption, который призван решить эту проблему.