Протоколы · 1 мин чтения

Методы аутентификации SOCKS5 (RFC 1929)

Прежде чем передавать ваш трафик, SOCKS5-прокси договаривается о способе аутентификации. Разбираем рукопожатие с согласованием методов из RFC 1928, схему логин/пароль из RFC 1929 и что это значит на практике — включая оговорку о передаче открытым текстом.

Рукопожатие с согласованием метода

SOCKS5 (описан в RFC 1928) не предполагает никакого метода аутентификации — он его согласует. Как только открывается TCP-соединение к прокси, клиент шлёт приветствие со списком поддерживаемых методов, а прокси выбирает один.

Приветствие клиента выглядит так: байт версии (0x05), число методов и столько же идентификаторов методов. Распространённые методы: 0x00 — «аутентификация не требуется», 0x02 — «имя пользователя/пароль» и 0xFF — «ни один метод не подходит». Сервер отвечает двумя байтами: версия и единственный выбранный метод. Если он возвращает 0x00, вы подключаетесь сразу; если 0x02, клиент обязан сначала пройти под-согласование с именем пользователя и паролем и только потом слать запрос на соединение. Если сервер возвращает 0xFF, ни один из предложенных методов не подошёл и он закрывает соединение. Именно поэтому прокси SOCKS5 s4m с аутентификацией на порту 1080 ожидает, что ваш клиент предложит метод 0x02.

Имя пользователя и пароль: RFC 1929

Метод с именем пользователя и паролем (0x02) описан отдельно, в RFC 1929. Это крошечный самодостаточный обмен, происходящий после согласования метода и перед SOCKS-запросом:

  • Клиент шлёт: байт версии под-согласования (0x01 — обратите внимание, это версия аутентификации, а не версия SOCKS), однобайтовую длину имени, само имя, однобайтовую длину пароля и пароль.
  • Сервер отвечает двумя байтами: версия (0x01) и байт статуса. 0x00 означает успех; всё остальное — отказ, после которого сервер закрывает соединение.

Только после успешного статуса клиент переходит к самому запросу SOCKS5 CONNECT с указанием назначения. Поскольку длины имени и пароля кодируются одним байтом, каждое из них ограничено 255 байтами. Как это выглядит с реальными клиентами, смотрите в руководстве по аутентификации на прокси, а работу с учётными данными — в API.

Оговорка про открытый текст и что с ней делать

RFC 1929 передаёт логин и пароль как открытый текст между клиентом и прокси. HTTPS до целевого сервиса не шифрует этот обмен аутентификации.

Используйте доверенный сетевой путь или шифрованный транспорт, который явно поддерживает провайдер. Выделенный IP не шифрует учётные данные и не заменяет их на текущих адресах s4m. Связанная тема: выделенный IP.

FAQ

Ответы на вопросы

Как SOCKS5 выбирает метод аутентификации?

Согласованием. Клиент начинает с приветствия, где перечисляет поддерживаемые методы (например, 0x00 — без аутентификации и 0x02 — имя/пароль), а сервер отвечает единственным выбранным методом. Если сервер выбрал 0x02, клиент проходит обмен по RFC 1929 с именем и паролем и только потом шлёт запрос на соединение.

Шифруется ли аутентификация SOCKS5 по имени и паролю?

RFC 1929 передаёт логин и пароль как открытый текст между клиентом и прокси. HTTPS до целевого сервиса не шифрует этот обмен аутентификации. Используйте доверенный сетевой путь или шифрованный транспорт, который явно поддерживает провайдер. Выделенный IP не шифрует учётные данные и не заменяет их на текущих адресах s4m. Связанная тема: выделенный IP.

Чем RFC 1928 отличается от RFC 1929?

RFC 1928 описывает сам SOCKS5, включая рукопожатие, в котором клиент и сервер согласуют метод аутентификации. RFC 1929 описывает лишь один из этих методов — схему с именем пользователя и паролем — со своим байтом версии под-согласования и форматом сообщений. Они работают в паре.

SOCKS5 с аутентификацией, как надо

Настройте доступ SOCKS5 или HTTP в s4m с учётными данными своего аккаунта.

Эту страницу нашли по запросу

Реальные поисковые фразы, на которые отвечает эта страница — по ссылкам откроются материалы, раскрывающие тему глубже.