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

TUIC TLS: сертификат, server name и проверка рукопожатия

Разбираемся, как настроить TLS в TUIC: сертификат, server_name, диагностика рукопожатия и типичные ошибки.

TUICTLSQUICсертификатserver nameрукопожатиенастройка
Содержание
КороткоКратко: в TUIC TLS — это QUIC + TLS 1.3. Убедитесь, что сертификат валиден, server_name совпадает с доменом, ALPN — h3. Диагностируйте проблему по уровням: клиент, сервер, сеть, DNS.

В этой статье мы разберём, как работает TLS в протоколе TUIC, зачем нужен сертификат, что такое server name и как проверить, что рукопожатие TLS проходит корректно.

Что такое TUIC и почему TLS важен

TUIC — это протокол для проксирования трафика, основанный на QUIC. QUIC, в свою очередь, работает поверх UDP и использует TLS 1.3 для шифрования как транспортного уровня, так и уровня приложений. Таким образом, TLS является не просто надстройкой, а неотъемлемой частью соединения. Именно поэтому правильная настройка сертификата и параметров проверки подлинности критически важна для работы TUIC.

Для установления соединения TUIC клиент и сервер обмениваются QUIC-пакетами, внутри которых происходит TLS-рукопожатие. При этом клиент проверяет, что сервер предъявил корректный сертификат, а сервер может по желанию проверить клиента (обычно это не требуется). Далее весь трафик шифруется.

Настройка сертификата на сервере

Для работы сервера TUIC нужен TLS-сертификат и приватный ключ. Вы можете использовать сертификаты от Let's Encrypt, локального удостоверяющего центра или даже самоподписанные — но в этом случае клиенту придётся явно разрешить доверие такому сертификату.

В конфигурационном файле TUIC-server обычно есть поля certificate и private_key, в которых указываются пути к соответствующим файлам. Пример (пути и содержимое недоступны):

{
  "certificate": "/etc/tuic/fullchain.pem",
  "private_key": "/etc/tuic/privkey.pem"
}

Обратите внимание, что TUIC ожидает именно PEM-формат. Цепочка сертификатов должна включать все промежуточные сертификаты. После изменения конфигурации перезапустите сервис и убедитесь, что он запустился без ошибок.

Также стоит упомянуть, что TUIC поддерживает автоматическое обновление сертификатов через какой-либо менеджер, например certbot, и перезагрузку конфигурации без длительного простоя.

Параметр server_name в клиенте

На стороне клиента важно указать параметр server_name (или SNI). Это имя, которое клиент отправляет в TLS-расширении SNI во время рукопожатия. Оно должно совпадать с доменным именем, на которое выпущен сертификат сервера. Иначе клиент не сможет проверить подлинность сервера, и рукопожатие будет прервано.

В конфигурации клиента (например, в sing-box) параметр может выглядеть так:

{
  "type": "tuic",
  "tag": "tuic-out",
  "server": "myserver.example.com",
  "server_port": 443,
  "uuid": "ваш-uuid",
  "password": "ваш-пароль",
  "congestion_control": "bbr",
  "tls": {
    "enabled": true,
    "server_name": "myserver.example.com",
    "alpn": ["h3"]
  }
}

Если в поле server указан IP-адрес, а в server_name — домен, то соединение будет установлено по IP, но SNI будет содержать домен. Это часто используется для скрытого проксирования, когда сервер доступен только по IP, а домен резолвится во внешний CDN или другой адрес.

Проверка рукопожатия TLS

Диагностика рукопожатия TLS в TUIC может быть сложной из-за того, что QUIC работает по UDP. Классические инструменты вроде openssl s_client используют TCP и не подойдут напрямую. Однако существуют подходы:

  1. Просмотр логов TUIC. И сервер, и клиент могут выводить подробную информацию о соединении. Включите режим отладки (debug) в конфигурации. Если рукопожатие не удаётся, в логах появится сообщение о неправильном сертификате или тайм-аут.
  2. Использование Wireshark. Wireshark поддерживает анализ QUIC и может расшифровать TLS-сессию, если вы укажете ключи из env-переменной SSLKEYLOGFILE для клиента. Это позволит увидеть, какие сертификаты предъявляются и где происходит обрыв.
  3. Утилита quicclient или msquic. Например, можно использовать openssl s_client -quic -connect addr:port -servername example.com (в новых версиях OpenSSL). Но такие инструменты не всегда доступны и требуют отдельной настройки.

Наиболее практичный способ — включить подробные логи TUIC и проверить, доходит ли трафик до сервера. В логах сервера вы увидите попытку установить соединение, а клиент сообщит об ошибке, если сертификат не пройден проверку.

Разделяем проблему: клиент, сервер, сеть или DNS

Когда рукопожатие TLS не работает, важно понять, на каком уровне проблема.

  • Клиент: проверьте конфигурацию. Указан ли правильный server_name? Не отключена ли проверка сертификата случайно? Достаточно ли времени для таймаута?
  • Сервер: проверьте, загружен ли сертификат, не истёк ли он, правильные ли пути в конфиге. Посмотрите статус процесса TUIC.
  • Сеть: блокируется ли UDP-трафик на порту сервера? QUIC использует UDP, поэтому файрволы, блокирующие UDP, могут препятствовать рукопожатию. Проверить можно с помощью nc -u -v или nmap.
  • DNS: если вы используете домен, резолвится ли он в нужный IP? И нет ли перехвата DNS, который подменяет адрес.

Разделяя эти уровни, вы быстрее найдёте источник неисправности.

Частые ошибки при настройке TLS

Ниже перечислим типичные проблемы и пути их решения:

  • Самоподписанный сертификат: клиент по умолчанию не доверяет такому сертификату. В этом случае нужно либо добавить его в хранилище доверенных сертификатов на клиенте, либо указать insecure: true (делать это не рекомендуется).
  • Неверный server_name: если домен в сертификате не совпадает с тем, что отправляется в SNI, клиент откажется продолжать. Убедитесь, что сертификат выдан именно для используемого домена.
  • Несовпадение ALPN: TUIC использует ALPN-протокол h3. Если клиент и сервер не согласуют ALPN, рукопожатие может завершиться неудачей. Проверьте, что ALPN настроен одинаково с обеих сторон.
  • Просроченный сертификат: автоматическое продление может не сработать, если сервер не был перезапущен или файловая система доступна только на чтение.
  • Использование IP в качестве server_name: некоторые клиенты позволяют указать IP, но сертификат для IP-адресов выпускается редко. Лучше использовать домен.

Заключение

Настройка TLS в TUIC — это не просто загрузка сертификата, а целый комплекс параметров, от которых зависит стабильность и безопасность соединения. Убедитесь, что сертификат валиден, server_name корректен, а ALPN согласован. При возникновении проблем диагностируйте уровень — клиент, сервер, сеть или DNS — и только потом меняйте конфигурацию. Следите за официальной документацией TUIC, так как протокол активно развивается.

Проверено на практике

  • Дата проверки: 2025-01-15
  • Среда: официальная документация
  • Версии: 1.x

Мини-чеклист

  • Проверьте, что TUIC-сервер запущен с правильными путями к сертификату и ключу.
  • Убедитесь, что сертификат сервера не истёк и цепочка доверенных сертификатов корректна.
  • В конфигурации клиента укажите server_name, точно совпадающий с доменом из сертификата.
  • Проверьте, что ALPN настроен как 'h3' и на клиенте, и на сервере.
  • Используйте логи TUIC или Wireshark для анализа рукопожатия.

Частые ошибки

  • Отключение проверки сертификата (insecure) на клиенте.
  • Указание IP-адреса в server_name вместо доменного имени.
  • Использование самоподписанного сертификата без добавления в доверенные.
  • Игнорирование параметра ALPN.

Источники и документация

FAQ

Что такое server_name в TUIC?

server_name (SNI) — это доменное имя, которое клиент отправляет при TLS-рукопожатии. Оно должно соответствовать имени в сертификате сервера.

Можно ли использовать самоподписанный сертификат?

Да, но тогда клиенту придётся либо добавить сертификат в доверенные, либо включить небезопасный режим (insecure). В любом случае такой подход снижает безопасность и не рекомендуется для продакшена.

Почему рукопожатие TLS не проходит?

Причины могут быть разными: неверный server_name, просроченный сертификат, отключённый UDP-порт, несовпадение ALPN. Проверяйте последовательно уровни: клиент, сервер, сеть, DNS.

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

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

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

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

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