Термин глоссария

SNI

Server Name Indication — «указание имени сервера»

Коротко

Имя сайта, которое клиент открыто называет в начале защищённого соединения — ещё до шифрования.

Что это

SNI — расширение протокола TLS. В самом первом сообщении (ClientHello) клиент называет имя сайта, к которому подключается. Это нужно, чтобы один IP-адрес обслуживал много HTTPS-сайтов и сервер сразу знал, какой сертификат показать. Расширение описано в RFC 6066; его первая редакция вышла в 2003 году.

Почему это важно для фильтрации

ClientHello уходит до того, как включится шифрование, и в исходной схеме имя сайта передаётся открытым текстом. Поэтому наблюдатель на пути — оператор или оборудование DPI — видит, на какой домен идёт соединение, хотя не видит содержимого. Блокировка «по имени» построена именно на этом.

Расширения Encrypted SNI и Encrypted Client Hello закрывают поле, но работают только с TLS 1.3 и требуют поддержки с обеих сторон. По данным Википедии, российские провайдеры начали блокировать ESNI в октябре 2020 года.

SNI в секрете прокси

В режиме FakeTLS клиент прокси в ClientHello называет домен — тот, что зашит в секрете сразу после ключа. Для фильтра это выглядит как заход на этот сайт. Домен записан в секрете шестнадцатеричными цифрами:

ee473ce5d4958eb5f968c87680a23854a0676f6f676c652e636f6d

Как прочитать домен

Подчёркнутая часть — это байты строки google.com в hex. Расшифровать их можно одной командой:

echo 676f6f676c652e636f6d | xxd -r -p

Как проверить SNI самому

Посмотреть, что сервер отвечает на конкретное имя в SNI, можно утилитой OpenSSL: параметр -servername задаёт то имя, которое клиент назовёт в ClientHello.

openssl s_client -connect IP-АДРЕС:443 -servername домен

Если домен перестал открываться

Домен маскировки должен оставаться правдоподобным: если сайт исчез, заблокирован у оператора или у него истёк сертификат, соединение к нему перестаёт выглядеть естественно. Тогда выбирают другой домен, создают новый секрет и перевыпускают ссылки.

Какой домен годится

Домен должен быть обычным сайтом, который не блокируется в вашей сети. В README mtg отдельно предупреждают: провайдеры могут заметить несоответствие, например google.com на IP-адресе, который Google не принадлежит, поэтому домен лучше связать с адресом сервера. Смена домена в telemt делает все выданные ссылки нерабочими, их придётся перевыпустить.

Источники

  1. Server Name Indication — Википедия
  2. RFC 6066, раздел 3: Server Name Indication
  3. mtg: README проекта
  4. telemt: FAQ

Связанные термины

Упоминается в статьях