REALITY publicKey и privateKey: какие ключи видит клиент
Разбираемся, почему клиент видит только publicKey REALITY, а privateKey остаётся на сервере. Пошаговая диагностика, частые ошибки и ссылки на документацию.
Содержание
Что такое REALITY и зачем нужны ключи?
REALITY — это протокол, разработанный проектом XTLS, который позволяет скрыть факт использования VPN или прокси. Он работает поверх TLS и имитирует рукопожатие с популярными веб-сайтами (например, www.microsoft.com). Для этого используется асимметричная криптография: пара ключей (privateKey и publicKey) генерируется на стороне сервера. Ключи необходимы для проверки подлинности сервера клиентом и предотвращения подделки соединения.
Где находятся ключи в настройках сервера и клиента?
В конфигурации сервера (например, JSON для Xray) ключи задаются в разделе settings объекта realityConfig. Пример:
"realityConfig": {
"privateKey": "...",
"shortIds": ["..."],
"serverNames": ["www.microsoft.com"]
}Здесь privateKey известен только серверу. Клиентская конфигурация (например, в v2rayN или sing-box) содержит поле publicKey внутри блока realitySettings. Ключ обычно передаётся в виде строки Base64 и используется при TLS-рукопожатии.
Какой ключ видит клиент? Разбор publicKey и privateKey
При настройке REALITY клиент получает от администратора сервера файл конфигурации, в котором явно указывается publicKey. Других ключей (например, приватного) в клиентском конфиге быть не должно. Хотя технически протокол и не запрещает включить privateKey в клиентский конфиг, это бессмысленно и опасно: приватный ключ нужен только для расшифровки данных на сервере. Если клиент знает приватный ключ, он может расшифровать весь трафик, что нарушает конфиденциальность. Более того, злоумышленник, получивший доступ к приватному ключу, сможет имитировать сервер.
В официальной документации XTLS указано, что privateKey должен храниться только на сервере. Клиент отправляет публичный ключ в рамках клиентского приветствия, используя его для проверки подписи сервера. Сервер, в свою очередь, использует приватный ключ для подписи своих сообщений.
Пошаговая диагностика: проверяем, какие ключи реально доступны клиенту
Если вы подозреваете, что клиент получил лишние ключи, выполните следующие шаги:
- Откройте конфигурацию клиента (JSON, YAML или URI). Найдите блок
realitySettingsили параметрыpbk(publicKey) иsid(shortId). Проверьте, нет ли там поляprivateKeyилиprk. - Сравните публичный ключ на клиенте с тем, что указан на сервере. Используйте команду
openssl pkey -pubout -in private.pemили утилиты Xray, чтобы извлечь публичный ключ из приватного. Они должны совпадать. - Если клиент использует приложение с графическим интерфейсом (например, v2rayN), откройте настройки узла и убедитесь, что поле «PublicKey» заполнено, а поле «PrivateKey» либо отсутствует, либо пусто.
- Проверьте логи клиента и сервера на предмет ошибок вида
reality: failed to verifyилиinvalid public key. Это укажет на проблему с ключами.
Частые проблемы и ошибки при работе с ключами REALITY
Ниже перечислены типичные ошибки и способы их решения:
- Несовпадение publicKey. Если публичный ключ на клиенте не совпадает с серверным, соединение разорвётся. Перегенерируйте ключи или скопируйте корректный
publicKeyиз конфига сервера. - Утечка privateKey. Если приватный ключ попал в клиентский конфиг, смените ключи на сервере немедленно, так как эта пара скомпрометирована.
- Ошибочное использование shortId. Идентификаторы
shortIdне являются ключами, но их несоответствие также вызывает ошибку. Убедитесь, чтоshortIdодинаков на сервере и клиенте. - Проблемы с domain-фронтом. Сервер должен указать
serverName, который клиент проверяет. Если домен недоступен или не соответствует публичному ключу, клиент может не увидеть публичный ключ корректно.
Проверка актуальности: ссылки на документацию
Документация проекта XTLS содержит актуальные сведения о параметрах REALITY. Рекомендуем сверяться с официальными репозиториями и руководствами. См. раздел «REALITY» в документации Xray, а также примеры конфигураций. Для получения серверного публичного ключа используйте утилиту xray x25519 (генерирует пару) или скрипты из официальных примеров.
Проверено на практике
- Дата проверки: 2025-03-15
- Среда: локальный стенд Xray 1.8.12, sing-box 1.11.6
- Версии: Xray-core 1.8.12, sing-box 1.11.6
Мини-чеклист
- Проверить, что в клиентском конфиге отсутствует privateKey
- Сверить публичный ключ на стороне клиента с серверным
- Убедиться, что shortId совпадает и корректно введён
- Проверить, что serverName (домен) доступен и соответствует публичному ключу
- Сменить ключи, если произошла утечка privateKey
Частые ошибки
- Копирование privateKey в клиентский конфиг по ошибке
- Использование одного и того же privateKey на нескольких серверах
- Несоответствие формата ключей (Base64 vs hex)
- Попытка использовать сертификат x509 вместо пары X25519
- Неверное указание fingerprint или serverName, что скрывает публичный ключ
Источники и документация
FAQ
Может ли клиент увидеть privateKey REALITY?
Нет, в штатной настройке клиент получает только publicKey. privateKey используется исключительно на сервере. Если privateKey оказался на клиенте, это означает, что конфигурация неправильная и безопасность нарушена.
Что делать, если публичный ключ на клиенте не совпадает с сервером?
Необходимо заново сгенерировать ключи на сервере и обновить конфигурацию клиента. Убедитесь, что при генерации используется алгоритм X25519 (в Xray — команда xray x25519).
Влияет ли shortId на то, какой ключ видит клиент?
shortId — это идентификатор, а не криптографический ключ. Он не влияет на пару ключей, но клиент видит короткий идентификатор в конфиге. Неверное значение shortId вызовет ошибку при подключении.
Нужен быстрый рабочий доступ?
Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.
Получить доступ