SNI, fingerprint и public key VLESS — параметры, которые можно увидеть внутри готового VLESS-ключа. Пользователь импортирует длинную ссылку в HAPP, открывает сведения о профиле и обнаруживает незнакомые поля: sni, fp, pbk, sid, flow, security.
На первый взгляд может показаться, что это дополнительные настройки, которые стоит менять для увеличения скорости или обхода проблем с подключением. На практике эти параметры являются частями единой серверной конфигурации.
Если изменить SNI, fingerprint или public key случайным образом, VLESS обычно не станет быстрее. Гораздо вероятнее, что соединение вообще перестанет устанавливаться.
Разберём простыми словами, за что отвечает каждый параметр, чем SNI отличается от адреса сервера, зачем нужен fingerprint и почему public key нельзя копировать из другого профиля.
Где находятся эти параметры
Готовая VLESS-ссылка может выглядеть примерно так:
vless://UUID@server.example:443?...&security=reality&sni=example.com&fp=chrome&pbk=...&sid=...&type=tcp
Это только упрощённый пример. Реальный ключ может содержать дополнительные параметры и использовать RAW, XHTTP, gRPC или другой транспорт.
В ссылках обычно встречаются следующие сокращения:
| Параметр | Полное название | Пример |
|---|---|---|
sni | Server Name Indication / serverName | sni=example.com |
fp | TLS fingerprint | fp=chrome |
pbk | Public key | pbk=AbCd... |
sid | Short ID | sid=0123456789abcdef |
security | Защита транспорта | security=reality |
flow | Режим обработки потока | flow=xtls-rprx-vision |
Официальные примеры ссылок HAPP также используют параметры sni, fp, pbk и sid.
Почему эти поля связаны друг с другом
VLESS является лёгким протоколом между клиентом и сервером Xray. Способ переноса данных и защита транспортного соединения настраиваются отдельно. Xray различает транспорт — например RAW, XHTTP или gRPC — и транспортную безопасность, например TLS или REALITY. Настройки клиента и сервера должны быть совместимыми.
Это означает, что недостаточно знать только:
- IP сервера;
- порт;
- UUID.
Клиент также должен использовать правильные:
- transport;
- security;
- SNI;
- fingerprint;
- public key;
- short ID;
- flow.
Готовая ссылка собирает все эти параметры в одну конфигурацию. Именно поэтому её лучше импортировать целиком, а не переносить поля вручную.
Что такое SNI в VLESS
SNI расшифровывается как Server Name Indication. Это имя сервера, которое клиент передаёт во время начального TLS-соединения.
Один IP-адрес может обслуживать несколько доменов. SNI помогает серверу понять, для какого имени устанавливается соединение и какой сертификат или конфигурацию нужно использовать.
В VLESS-ссылке SNI обычно выглядит так:
sni=example.com
В интерфейсе клиента поле может называться:
- SNI;
- Server Name;
- ServerName;
- TLS Server Name;
- доменное имя TLS.
SNI и адрес сервера — не одно и то же
Это важное различие.
Адрес сервера определяет, куда физически подключается клиент:
server.example:443
или:
192.0.2.10:443
SNI передаётся уже во время защищённого соединения:
example.com
Поэтому адрес и SNI могут отличаться.
Упрощённо подключение выглядит так:
- HAPP определяет IP указанного сервера.
- Клиент устанавливает соединение с этим IP и портом.
- Во время TLS Client Hello передаётся SNI.
- Сервер проверяет, подходит ли указанное имя.
- При совпадении остальных параметров соединение продолжается.
SNI не заменяет DNS и не перенаправляет подключение на другой сервер. Если изменить только SNI, физический адрес подключения останется прежним.
Как SNI работает с обычным TLS
При обычном TLS значение serverName используется при проверке сертификата. Домен должен присутствовать в SAN сертификата сервера. Если поле оставлено пустым, Xray может автоматически использовать адрес подключения, когда тот указан доменным именем.
Если SNI не соответствует сертификату, возможна ошибка проверки защищённого соединения.
Например:
- адрес сервера —
vpn.example.com; - сертификат выпущен для
vpn.example.com; - пользователь меняет SNI на
google.com; - сертификат больше не соответствует имени;
- подключение завершается ошибкой.
- адрес сервера —
Поэтому нельзя ставить в SNI произвольный популярный домен только потому, что он «выглядит надёжно».
Как SNI используется в конфигурациях REALITY
В конфигурациях с security=reality клиентское поле serverName должно соответствовать одному из значений serverNames, разрешённых на сервере. Обычно эти значения связаны с именами, которые принимает выбранный сервером целевой TLS-сайт.
Если клиент отправит другое значение, сервер не сможет обработать подключение как правильное.
Простой пример:
На сервере разрешено:
serverNames: ["example.com", "www.example.com"]
Клиент может использовать:
sni=example.com
или:
sni=www.example.com
Но случайное значение:
sni=another-site.com
не обязано работать.
Можно ли изменить SNI для ускорения подключения
Обычно нет.
SNI не является серверной локацией и само по себе не выбирает более быстрый маршрут. Изменение этого поля не перенесёт соединение в другую страну, не уменьшит расстояние до сервера и не увеличит его пропускную способность.
Смена SNI имеет смысл только тогда, когда:
- администратор сервера изменил конфигурацию;
- сервис выдал обновлённый профиль;
- сервер поддерживает несколько разрешённых значений;
- проводится осознанная серверная диагностика.
Обычному пользователю лучше оставить значение из готового ключа.
Что такое fingerprint в VLESS
Fingerprint — это имитация характерного вида начального TLS-сообщения клиента, то есть TLS Client Hello.
Разные браузеры и сетевые библиотеки формируют Client Hello немного по-разному:
- предлагают разные наборы TLS-возможностей;
- используют определённый порядок расширений;
- передают характерные параметры;
- по-разному объявляют ALPN и поддерживаемые алгоритмы.
Совокупность этих особенностей называют TLS-отпечатком.
В VLESS-ссылке fingerprint обычно выглядит так:
fp=chrome
В интерфейсе приложения он может называться:
- fingerprint;
- TLS fingerprint;
- uTLS fingerprint;
- отпечаток клиента.
Что означает fp=chrome
Значение:
fp=chrome
не означает, что HAPP запускает браузер Chrome или передаёт его историю, cookies и данные аккаунта.
Xray использует библиотеку uTLS, чтобы сформировать Client Hello, похожий на TLS-рукопожатие актуальной версии Chrome. Аналогично доступны значения firefox, safari, ios, android, edge и другие. По умолчанию для TLS в Xray используется chrome.
Fingerprint влияет только на определённую часть сетевого рукопожатия.
Официальная документация отдельно подчёркивает: эта функция имитирует именно отпечаток TLS Client Hello, а не всё поведение настоящего браузера.
Какие значения fingerprint существуют
В Xray поддерживаются отпечатки распространённых клиентов:
chrome;firefox;safari;ios;android;edge;360;qq.
Также существуют:
random— выбор одного из современных браузерных отпечатков при запуске;randomized— создание полностью случайного уникального TLS-отпечатка;- специальные значения uTLS для опытных пользователей.
При использовании REALITY fingerprint является обязательным, а вариант unsafe, отключающий uTLS, не поддерживается.
Какой fingerprint лучше
Для обычного пользователя — тот, который уже указан в ключе.
Чаще всего это:
fp=chrome
Значение randomized не обязательно лучше. Полностью случайный отпечаток может быть уникальнее, но «уникальный» не всегда означает «похожий на обычный браузер».
Менять chrome на firefox, safari или randomized ради скорости тоже бессмысленно. Fingerprint почти не влияет на пропускную способность после установления соединения.
Он влияет преимущественно на начальное рукопожатие и внешний вид Client Hello.
Почему неправильный fingerprint ломает соединение
В обычной TLS-конфигурации изменение fingerprint иногда не создаёт заметной проблемы, если сервер принимает разные корректные Client Hello.
Но совместимость зависит от:
- типа безопасности;
- транспорта;
- версии Xray;
- ALPN;
- возможностей сервера;
- промежуточного proxy;
- CDN;
- настроек REALITY.
Некоторые комбинации требуют uTLS или определённого поведения Client Hello. Поэтому менять fingerprint без причины не стоит.
Если профиль перестал работать после ручной смены fp, верните исходное значение или импортируйте ключ заново.
Что такое public key в VLESS
Public key в таких VLESS-профилях относится не к UUID пользователя и не к обычному TLS-сертификату сайта.
Это публичная часть пары X25519, используемой сервером и клиентом в конфигурации REALITY.
На сервере хранится:
- private key — закрытый ключ.
Клиент получает соответствующий:
- public key — публичный ключ.
В ссылке он обычно передаётся как:
pbk=...
Как связаны private key и public key
Сервер создаёт пару ключей:
- закрытый ключ остаётся на сервере;
- соответствующее значение передаётся клиенту.
Клиент использует его во время установки соединения. Если public key не соответствует private key сервера, проверка не пройдёт.
Именно поэтому нельзя взять pbk из другого VLESS-профиля, даже если:
- сервер расположен в той же стране;
- используется тот же SNI;
- совпадает порт;
- одинаковый fingerprint;
- профили созданы в одной панели.
Public key должен соответствовать конкретной серверной конфигурации.
Почему в новой документации publicKey называется password
В актуальной документации Xray клиентское поле publicKey переименовано в password. Разработчики объясняют это желанием избежать неправильного понимания его роли: математически это действительно публичный ключ X25519, но в конструкции REALITY он хранится у клиентов и не должен восприниматься как информация для свободной публикации.
Это может запутать пользователя, потому что одновременно встречаются разные названия:
publicKey;Public Key;pbk;password.
Они могут обозначать одно и то же клиентское значение на разных уровнях:
- старое поле Xray;
- современное поле конфигурации;
- параметр ссылки;
- подпись в интерфейсе клиента.
Не нужно самостоятельно заменять pbk= на password= внутри VLESS-ссылки. Формат ссылки и внутренний JSON-конфиг — не одно и то же.
Официальные примеры HAPP по-прежнему используют pbk в ссылках.
Public key — это пароль?
Не в обычном смысле.
Public key:
- не является паролем от аккаунта;
- не является UUID пользователя;
- не позволяет войти в панель управления;
- не заменяет закрытый ключ сервера.
Но он является частью клиентской конфигурации и необходим для правильной установки соединения.
Кроме pbk, полный VLESS-ключ обычно содержит UUID, адрес сервера и остальные параметры доступа. Поэтому публиковать полный профиль в открытом чате нельзя.
Даже если отдельный параметр называется публичным, весь ключ целиком является доступом к сервису.
Можно ли вычислить private key из public key
Практическая криптографическая схема строится так, чтобы закрытый ключ нельзя было восстановить из публичного обычным перебором.
Но это не делает полезным публичное распространение клиентского профиля. Текущая документация Xray прямо рекомендует не воспринимать это значение как то, что следует публиковать открыто.
Для пользователя действует простое правило:
не отправляйте pbk отдельно без необходимости и никогда не публикуйте полный VLESS-ключ.
Что такое short ID
Рядом с public key часто находится параметр:
sid=...
или поле:
shortId
Short ID помогает серверу различать допустимые клиентские подключения. Клиентское значение должно присутствовать в списке shortIds, настроенном на сервере.
Short ID записывается шестнадцатеричными символами:
0–9 и a–f
Его длина может составлять до 16 символов, но количество символов должно быть чётным. Например, aa1234 допустимо, а значение с нечётным количеством символов вызовет ошибку.
Short ID нельзя:
- придумывать самостоятельно;
- копировать из чужого сервера;
- сокращать ради удобства;
- заменять случайной строкой;
- путать с UUID.
Если sid повреждён, подключение может не пройти проверку даже при правильных SNI, fingerprint и public key.
Чем UUID отличается от public key
Эти значения выполняют разные задачи.
UUID или ID VLESS:
- идентифицирует пользователя;
- находится после
vless://; - проверяется VLESS-сервером;
- может быть отдельным для каждого клиента.
Public key:
- связан с серверной криптографической парой;
- обычно передаётся как
pbk; - используется при установлении защищённого соединения;
- может быть общим для нескольких пользователей одного inbound.
Упрощённо:
- UUID отвечает на вопрос: «Какой пользователь подключается?»
- public key помогает установить правильное защищённое соединение с серверной конфигурацией.
Оба параметра нужны одновременно.
Частые ошибки с параметрами
SNI скопирован с пробелом
Даже случайный пробел в начале или конце домена делает значение другим. Если профиль вводился вручную, удалите пробелы.
В SNI добавлен протокол
Нужно указывать:
example.com
а не:
SNI — это имя, а не полный URL.
Fingerprint оставлен пустым
Для некоторых конфигураций это критично. В REALITY fingerprint обязателен. Обычно используется chrome.
Public key обрезан
Длинное значение легко скопировать не полностью. Лучше импортировать исходную ссылку или QR-код.
Перепутаны public key разных серверов
Даже если два профиля внешне похожи, их ключевые пары могут различаться.
Short ID введён с нечётным числом символов
Такое значение не соответствует допустимому формату и может вызвать ошибку конфигурации.
Параметры взяты из разных профилей
Нельзя собирать конфигурацию по принципу:
- адрес из первого ключа;
- SNI из второго;
- public key из третьего;
- UUID из четвёртого.
Все поля должны относиться к одной серверной конфигурации.
Что происходит при неправильных параметрах
Симптомы могут отличаться в зависимости от клиента и версии Xray:
- профиль импортируется, но не подключается;
- соединение сразу отключается;
- появляется TLS Handshake error;
- клиент сообщает об ошибке проверки;
- долго идёт подключение, затем возникает тайм-аут;
- значок VPN появляется, но интернет не работает;
- один клиент отклоняет ключ, а другой показывает пустые поля.
Если проблема началась после ручного изменения параметров, не пытайтесь угадывать правильные значения. Удалите профиль и импортируйте оригинальный ключ заново.
Что можно менять безопасно
В готовом VLESS-профиле без согласования обычно можно изменить только:
- локальное название профиля;
- комментарий;
- значок или группу;
- правила маршрутизации в приложении;
- режим global/direct/proxy;
- настройки автоматического выбора сервера.
Не следует вручную менять:
- UUID;
- адрес;
- порт;
- SNI;
- fingerprint;
- public key;
- short ID;
- security;
- transport;
- flow;
- path;
- serviceName.
Изменение серверных параметров должно выполняться одновременно на сервере и в клиентском профиле.
Что проверить в HAPP
Если VLESS не подключается в HAPP:
- Удалите изменённый профиль.
- Скопируйте исходную ссылку заново.
- Убедитесь, что она начинается с
vless://. - Импортируйте её целиком.
- Проверьте, что появились
sni,fp,pbkиsid, если они предусмотрены ключом. - Выберите правильный профиль.
- Обновите HAPP.
- Попробуйте подключение через другую сеть.
- Проверьте тот же ключ на другом устройстве.
- Обратитесь к сервису за новым ключом, если исходный профиль повреждён.
Не нужно вручную исправлять public key по первым или последним символам. Одного неправильного символа достаточно, чтобы значение перестало соответствовать серверу.
Нужно ли скрывать эти параметры на скриншоте
Если скриншот публикуется открыто, лучше скрыть:
- полный VLESS-ключ;
- UUID;
- адрес сервера;
- public key;
- short ID;
- название подписки с идентификатором;
- QR-код.
SNI и fingerprint сами по себе обычно менее чувствительны. Например, fp=chrome почти ничего не говорит о конкретном пользователе.
Но полный набор параметров облегчает копирование профиля и анализ серверной конфигурации. Поэтому безопаснее закрывать весь блок технических полей.
Для обращения в официальную поддержку можно отправить профиль через предусмотренный сервисом защищённый канал. В публичный Telegram-чат, комментарии на сайте или форум полный ключ отправлять не стоит.
Короткая памятка
| Параметр | За что отвечает | Можно менять пользователю |
| SNI | Имя при TLS-соединении | Нет |
| Fingerprint | Вид TLS Client Hello | Обычно нет |
| Public key / pbk | Соответствие серверной паре ключей | Нет |
| Short ID / sid | Дополнительная проверка клиента | Нет |
| UUID | Идентификация пользователя VLESS | Нет |
| Название профиля | Отображение в приложении | Да |
| Режим маршрутизации | Какие приложения идут через VLESS | Да |
Итог
SNI, fingerprint и public key в VLESS являются частями одной защищённой конфигурации.
SNI сообщает имя во время TLS-рукопожатия. Оно должно соответствовать настройкам сервера и не является произвольным доменом для ускорения подключения.
Fingerprint задаёт вид TLS Client Hello. Значение chrome имитирует определённые особенности рукопожатия браузера Chrome, но не превращает HAPP в браузер и практически не влияет на скорость после подключения.
Public key, который в ссылках обычно обозначается как pbk, соответствует закрытому ключу сервера. В современных версиях конфигурации Xray это поле переименовано в password, но пользовательские ссылки и приложения могут продолжать показывать старое название.
Рядом часто находится short ID. Он тоже должен совпадать с разрешённым значением на сервере.
Все эти параметры уже содержатся в готовом VLESS-ключе. Обычному пользователю не нужно подбирать их вручную. Если профиль перестал работать после редактирования, правильное решение — удалить его и заново импортировать оригинальную ссылку или обновить подписку.
