Диагностика и исправление troubleshooting Обновлено 6 Windows, Android, iOS, macOS, Linux

REALITY publicKey и privateKey: какие ключи видит клиент

Разбираемся, почему клиент видит только publicKey REALITY, а privateKey остаётся на сервере. Пошаговая диагностика, частые ошибки и ссылки на документацию.

REALITYVLESSpublicKeyprivateKeyдиагностикабезопасность
Содержание
КороткоКлиент REALITY всегда видит только publicKey, который предназначен для проверки подлинности сервера. privateKey хранится только на сервере и не должен передаваться клиенту. Если клиент получил 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 должен храниться только на сервере. Клиент отправляет публичный ключ в рамках клиентского приветствия, используя его для проверки подписи сервера. Сервер, в свою очередь, использует приватный ключ для подписи своих сообщений.

Пошаговая диагностика: проверяем, какие ключи реально доступны клиенту

Если вы подозреваете, что клиент получил лишние ключи, выполните следующие шаги:

  1. Откройте конфигурацию клиента (JSON, YAML или URI). Найдите блок realitySettings или параметры pbk (publicKey) и sid (shortId). Проверьте, нет ли там поля privateKey или prk.
  2. Сравните публичный ключ на клиенте с тем, что указан на сервере. Используйте команду openssl pkey -pubout -in private.pem или утилиты Xray, чтобы извлечь публичный ключ из приватного. Они должны совпадать.
  3. Если клиент использует приложение с графическим интерфейсом (например, v2rayN), откройте настройки узла и убедитесь, что поле «PublicKey» заполнено, а поле «PrivateKey» либо отсутствует, либо пусто.
  4. Проверьте логи клиента и сервера на предмет ошибок вида 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 вызовет ошибку при подключении.

Нужен быстрый рабочий доступ?

Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.

Получить доступ

Дальше по теме

Связанные статьи