Protokoły · 2 min czytania

Metody uwierzytelniania SOCKS5 (RFC 1929)

Zanim proxy SOCKS5 przekaże twój ruch, negocjuje, jak cię uwierzytelnić. Ten przewodnik przeprowadza przez handshake negocjacji metody SOCKS5 z RFC 1928, schemat nazwy użytkownika/hasła z RFC 1929 i co to oznacza w praktyce — w tym zastrzeżenie dotyczące tekstu jawnego.

Uścisk dłoni negocjacji metody

SOCKS5 (zdefiniowany w RFC 1928) nie zakłada metody uwierzytelniania — negocjuje ją. Gdy tylko połączenie TCP z proxy zostanie otwarte, klient wysyła powitanie, w którym wymienia metody uwierzytelniania, które obsługuje, a proxy wybiera jedną z nich.

Powitanie klienta to: bajt wersji (0x05), liczba metod, a następnie tyle identyfikatorów metod. Powszechne metody to 0x00 "brak wymagań dotyczących uwierzytelniania", 0x02 "nazwa użytkownika/hasło" oraz 0xFF "brak akceptowalnych metod". Serwer odpowiada dwoma bajtami: wersją i jedną wybraną metodą. Jeśli zwróci 0x00, łączysz się od razu; jeśli zwróci 0x02, klient musi teraz przeprowadzić podnegocjację nazwy użytkownika/hasła, zanim będzie mógł wysłać jakiekolwiek żądanie połączenia. Jeśli serwer zwróci 0xFF, żadna z oferowanych metod nie była akceptowalna i zamyka połączenie. Dlatego uwierzytelnione s4m SOCKS5 proxy na porcie 1080 oczekuje, że twój klient zaoferuje metodę 0x02.

Nazwa użytkownika/hasło: RFC 1929

Metoda nazwy użytkownika/hasła (0x02) jest określona osobno w RFC 1929. Jest to mała, samodzielna wymiana, która odbywa się po negocjacji metody i przed żądaniem SOCKS:

  • Klient wysyła: bajt wersji sub-negocjacji (0x01 — zauważ, że to jest wersja autoryzacji, a nie wersja SOCKS), bajt długości nazwy użytkownika, nazwę użytkownika, bajt długości hasła oraz hasło.
  • Serwer odpowiada dwoma bajtami: wersją (0x01) i bajtem statusu. 0x00 oznacza sukces; cokolwiek innego oznacza niepowodzenie, a serwer zamyka połączenie.

Dopiero po uzyskaniu statusu sukcesu klient przechodzi do rzeczywistego żądania SOCKS5 CONNECT, wskazując cel. Ponieważ zarówno nazwa użytkownika, jak i hasło są prefiksowane długością jako pojedyncze bajty, każdy z nich jest ograniczony do 255 bajtów. Zobacz nasz przewodnik po autoryzacji proxy, aby zobaczyć, jak to wygląda w przypadku rzeczywistych klientów oraz API do obsługi poświadczeń.

Ostrzeżenie o czystym tekście i jak sobie z tym radzić

Krytyczny uczciwy punkt: RFC 1929 przesyła nazwę użytkownika i hasło w czystym tekście. Bajty nie są szyfrowane ani haszowane — każdy, kto może obserwować połączenie TCP między tobą a proxy, może odczytać twoje dane uwierzytelniające. Sam RFC to przyznaje i ostrzega, że metoda ta jest odpowiednia tylko tam, gdzie takie narażenie jest akceptowalne.

Co to oznacza w praktyce: bezpieczeństwo uwierzytelniania za pomocą nazwy użytkownika/hasła SOCKS5 zależy od zaufania do ścieżki do proxy lub od owinięcia całego połączenia SOCKS w coś szyfrowanego. Środki zaradcze, z których korzystają ludzie, obejmują tunelowanie SOCKS5 przez TLS lub SSH, uruchamianie proxy w zaufanej sieci lub poleganie na białej liście adresów IP zamiast (lub oprócz) danych uwierzytelniających — co czyni praktycznym posiadanie dedykowanego IP. Inne metody uwierzytelniania SOCKS5 istnieją w teorii (na przykład GSS-API z RFC 1928), ale nazwa użytkownika/hasło pozostaje zdecydowanie najczęściej wdrażaną, więc zrozumienie jej czystego charakteru — i nieużywanie ważnego hasła jako danych uwierzytelniających proxy — ma znaczenie.

FAQ

Pytania, odpowiedzi

Jak SOCKS5 decyduje, którą metodę uwierzytelniania zastosować?

Negocjuje. Klient otwiera się powitaniem, wymieniając metody, które obsługuje (takie jak 0x00 no-auth i 0x02 username/password), a serwer odpowiada jedną metodą, którą wybiera. Jeśli serwer wybierze 0x02, klient następnie przeprowadza wymianę nazwy użytkownika/hasła RFC 1929 przed wysłaniem żądania połączenia.

Czy uwierzytelnianie za pomocą nazwy użytkownika/hasła SOCKS5 jest szyfrowane?

Nie. RFC 1929 wysyła nazwę użytkownika i hasło w postaci niezaszyfrowanej, więc każdy, kto może obserwować połączenie z proxy, może je odczytać. Aby chronić dane uwierzytelniające, tuneluj połączenie SOCKS5 przez TLS lub SSH, użyj zaufanej ścieżki sieciowej lub polegaj na białej liście adresów IP z dedykowanym adresem IP.

Jaka jest różnica między RFC 1928 a RFC 1929?

RFC 1928 definiuje SOCKS5, w tym handshake negocjacji metody, w którym klient i serwer zgadzają się na metodę uwierzytelniania. RFC 1929 definiuje tylko jedną z tych metod — schemat nazwy użytkownika/hasła — z własnym bajtem wersji sub-negocjacji i formatem wiadomości. Działają razem.

Uwierzytelniony SOCKS5, zrobiony dobrze

Proxy SOCKS5 s4m na porcie 1080 używają autoryzacji za pomocą nazwy użytkownika/hasła, z opcjonalnym dedykowanym adresem IP, abyś mógł dodać stabilny adres do białej listy. Płatność za zużycie, anonimowe konta, akceptowane kryptowaluty.

Ludzie znaleźli tę stronę, szukając

Rzeczywiste frazy wyszukiwania, na które ta strona odpowiada — powiązane otwierają stronę, która je szczegółowo omawia.