Mozilla, Cloudflare, Fastly и Apple работают над применением шифрования для SNI
Как сообщает opennet.ru компании Mozilla, Cloudflare, Fastly и Apple работают над новым TLS-расширением ESNI (Encrypted Server Name Indication), которое позволит передавать идентификатор запрошенного хоста в шифрованном виде. В настоящее время расширение SNI, необходимое для организации работы на одном IP-адресе наскольких HTTPS-сайтов со своими сертификатами, подразумевает передачу имени хоста на стадии согласования соединения в сообщении ClientHello, которое передается в открытом виде до установки шифрованного канала связи.
С одной стороны подобная особенность упрощает организацию обработки запросов на http-серверах и позволяет использовать прокси и CDN-сети для проброса шифрованного трафика, но с другой стороны раскрывает информацию о запрошенных ресурсах для транзитных наблюдателей, например, позволяет провайдеру судить о запрашиваемых пользователем сайтах и выборочно фильтровать трафик. До недавнего времени CDN-сети Amazon и Google предоставляли возможность скрытия имени хоста при помощи техники "domain fronting", позволявшей обращаться по HTTPS с указанием в SNI фиктивного хоста и фактической передачей имени запрашиваемого хоста в HTTP-заголовке Host внутри TLS-сеанса (данная возможность позволяла использовать CDN для обхода блокировок и весной была отключена).
Поддержка начальной черновой спецификации ESNI уже реализована в библиотеках BoringSSL (используется в Chromium), NSS (используется в Friefox) и picotls (используется в http-сервере h2o). При использовании ESNI имя хоста (поле server_name) также передается в ClientHello, но в зашифрованном виде. Для шифрования используется секрет, вычисленный на основе ключей сервера и клиента. Для расшифровки перехваченного или полученного значения поля ESNI необходимо знать закрытый ключ клиента или сервера (плюс открытые ключи сервера или клиента). Информация об открытых ключах передается для серверного ключа в DNS с использованием TXT-поля "_esni", а для клиентского ключа в сообщении ClientHello. Расшифровка также возможна при помощи согласованного в процессе установки TLS-соединения общего секрета, известного только клиенту и серверу. Для скрытия обращения к DNS клиентом может применяться DNS-over-HTTPS или DNS-over-TLS.