Подмена отпечатка TLS (JA3/JA4) для обхода DPI
Многие пользователи сталкиваются с ситуацией: сервер работает, IP не заблокирован, но подключение обрывается на этапе рукопожатия (handshake). Чаще всего причина кроется в TLS-отпечатке. Когда любое приложение устанавливает защищенное соединение, оно отправляет пакет ClientHello. Этот пакет содержит уникальный набор шифров, расширений и эллиптических кривых. Системы DPI анализируют этот пакет и создают хеш (JA3 или JA4 отпечаток).
Проблема в том, что отпечаток программного кода на языке Go (на котором написан Xray) кардинально отличается от отпечатка обычного браузера Google Chrome или Safari. Провайдер видит «незнакомую» программу и сбрасывает соединение. Для решения этой проблемы была внедрена библиотека uTLS. Она перехватывает оригинальный ClientHello вашего клиента и подменяет его параметры так, чтобы они с математической точностью совпадали с поведением популярных браузеров. Для провайдера вы превращаетесь в обычного пользователя, листающего ленту в Safari на iPhone.
Частые вопросы
❓ Нужно ли настраивать uTLS на сервере?
Нет, механизм подмены отпечатка работает исключительно на клиентской стороне перед отправкой пакетов в сеть.
❓ Почему соединение все равно блокируется?
Возможно, провайдер блокирует по IP-адресу или по SNI-домену. uTLS решает только проблему распознавания самого клиента.
❓ Влияет ли uTLS на производительность процессора?
Библиотека работает крайне эффективно и практически не потребляет дополнительных ресурсов устройства.