TLS Fingerprinting Wyjaśnienie: JA3, JA4 i jak uniknąć wykrywania

Dowiedz się, w jaki sposób pobieranie odcisków palców TLS ujawnia tożsamość scrapera poprzez hashy JA3 / JA4, analizę pakietu szyfrowego i sygnały HTTP / 2 - plus strategie łagodzące przy użyciu bibliotek TLS klasy przeglądarkowej.

TLS Fingerprinting Wyjaśnienie: JA3, JA4 i jak uniknąć wykrywania

Co to jest TLS Fingerprinting?

Pobieranie odcisków palców TLS jest techniką wykrywania biernego, która identyfikuje klientów w oparciu o sposób inicjowania zaszyfrowanych połączeń. Za każdym razem, gdy Twój scraper, przeglądarka lub biblioteka HTTP łączy się ze stroną internetową przez HTTPS, wysyła wiadomość TLS ClientHello zawierającą zestawy szyfrowe, rozszerzenia, krzywe eliptyczne i inne parametry w określonej kolejności. Systemy anty-bot analizują ten uścisk dłoni, aby ustalić, czy łączący się klient odpowiada temu, co jego agent użytkownik twierdzi, że jest.

W przeciwieństwie do pobieranie odcisków palców przez przeglądarkę, co wymaga wykonania JavaScript, drukarnie odcisków palców TLS na warstwie sieciowej - zanim zostanie dostarczona jakakolwiek zawartość strony. To sprawia, że jest to jeden z najwcześniejszych i najtrudniejszych sygnałów do wykrycia uniknąć, jak pokryte w naszym kompleksowy przewodnik jak systemy antybotowe wykrywają proxy.

Jak działa TLS uściski dłoni

Przed wymianą danych HTTP przez HTTPS klient i serwer wykonują uścisk dłoni TLS. Pierwsza krytyczna wiadomość - ClientHello - zawiera wszystko, czego systemy antybotowe potrzebują do pobierania odcisków palców:

  1. Wersja TLS: Maksymalna wersja TLS obsługiwana przez klienta (np. TLS 1.2, TLS 1.3).
  2. Apartamenty Cipher: Zamówiona lista algorytmów szyfrujących, których klient jest gotów użyć.
  3. Rozszerzenia: Dodatkowe możliwości, takie jak oznaczenie nazwy serwera (SNI), ALPN, algorytmy podpisu i kluczowe grupy akcji.
  4. Krzywe elliptyczne: Obsługiwane typy krzywych dla wymiany kluczy (np. x25519, secp256r1).
  5. Metody kompresji: Zazwyczaj nieaktualne w nowoczesnych implementacjach, ale ich obecność lub nieobecność nadal jest sygnałem.

Każda biblioteka HTTP, przeglądarka i język programowania runtime tworzy odrębny wzór KlientHello. Chrome, Firefox, Safari, Python requests, Go 's net/httpi Node.js każdy ma rozpoznawalne podpisy.

JA3 Drukowanie odcisków palców

JA3 jest najczęściej stosowaną metodą pobierania odcisków palców TLS. Opracowany przez inżynierów Salesforce, tworzy hasz MD5 z pięciu pól w wiadomości ClientHello:

PoleOpisPrzykład Wartości
Wersja TLSProponowana wersja protokołu771 (TLS 1.2), 772 (TLS 1.3)
Suites CipherZamówiony wykaz kodów pakietu szyfrującego4865- 4866- 4867- 49195- 49199...
RozszerzeniaWykaz kodów typu rozszerzenia0- 23- 65281- 10- 11- 35- 16- 5...
Krzywe elliptyczneObsługiwane grupy29- 23- 24
Formaty punktowe WEObsługiwane typy formatów punktów0

Te pięć wartości łączy się z przecinkami i hashed do produkcji 32- znaków JA3 odciski palców. Na przykład Pythona requests biblioteka produkuje inny hash JA3 niż Chrome, nawet jeśli oba ustawienia tego samego łańcucha agenta użytkownika.

JA3 Wykrywanie w praktyce

# Example JA3 hash computation (conceptual)
# ClientHello fields → concatenated string → MD5 hash
# Python requests (urllib3/OpenSSL) — distinct JA3
# ja3: 771,4866-4867-4865-49196-49200-159-52393-52392-52394...,0-23-65281-10-11...
# ja3_hash: "773906b0efdefa24a7f2b8eb6985bf37"
# Chrome 120+ — different cipher order, different extensions
# ja3: 771,4865-4866-4867-49195-49199-49196-49200-52393-52392...,0-23-65281-10-11...
# ja3_hash: "cd08e31494f9531f560d64c695473da9"
# The hash reveals the client library, regardless of User-Agent

JA4 - Następne pokolenie

JA4, także z Salesforce, poprawia się na JA3, wytwarzając bardziej czytelny i solidny odcisk palca. Zamiast nieprzezroczystego haszu MD5, JA4 tworzy ustrukturyzowany identyfikator z trzema składnikami:

  • JA4 _ a: Typ protokołu + wersja TLS + obecność SNI + liczba szyfrów + liczba rozszerzeń + ALPN pierwsza wartość (np. "t13d1517h2 _ 8daaf6152771 _ b0da82dd1658").
  • JA4 _ b: Ssortowane okrojone mieszanko apartamentów szyfrujących.
  • JA4 _ c: Sortowane skrócone hash rozszerzeń (z SNI i ALPN usunięte w celu zmniejszenia zmienności).

JA4 jest trudniejszy do wyduszenia, ponieważ zawiera dodatkowe sygnały i używa formatu, który opiera się proste dopasowanie haszu.

Wspólne TLS Odciski palców przez Klienta

KlientBiblioteka TLSUznane kwalifikacjeRyzyko wykrycia
Chrome (najnowszy)BoringSSLKonkretny porządek szyfrowania, wartości GREASE, wsparcie ECHNiski (jeśli dopasowany prawidłowo)
FirefoxNSSRóżne preferencje szyfrowania, rozszerzenie uprawnień delegowanychNiski (jeśli dopasowany prawidłowo)
Żądania PythonaOpenSSL (poprzez urllib3)Brak GREASE, mniej rozszerzeń, OpenSSL kolejności szyfrowaniaBardzo wysoki
Go net / httpGo crypto / tlsUnikalny porządek szyfrowania, brak wielu rozszerzeńBardzo wysoki
Node.js (axios / got)OpenSSL (poprzez węzeł)Polecenie rozszerzenia specyficzne dla węzła, brak GREASEWysoki
lokówkaZmienne (OpenSSL / NSS / etc.)Zależy od budowy, ale zazwyczaj nie-przeglądarki odciski palcówWysoki

Dlaczego TLS Fingerprinting jest trudne do uniknięcia

Pobieranie odcisków palców TLS stanowi wyjątkowe wyzwanie w porównaniu z innymi metodami wykrywania:

  • Wykrywanie warstw sieciowych: Działa przed wymianą zawartości HTTP, więc nie można go pokonać przez wstrzyknięcie JavaScript lub manipulację nagłówkiem.
  • Podpis poziomu biblioteki: Odcisk palca jest określony przez bibliotekę TLS skompilowaną do czasu uruchomienia, a nie przez kod aplikacji. Zmiana łańcucha agenta użytkownika nie ma żadnego wpływu na odcisk palca TLS.
  • Przejrzystość proxy: Standardowe proxy HTTP / HTTPS (w tym proxy mieszkaniowe) przekierowanie uścisku dłoni TLS z klienta na serwer, tak aby pochodzenie zobaczyło prawdziwy odcisk palca TLS klienta.
  • Urządzenie sprzęgające: Każda niewielka wersja biblioteki TLS może stworzyć nieco inny odcisk palca, czyniąc wersję niedopasowaną wykrywalną.

TLS Fingerprinting Strategie kontroli

1. Użyj biblioteki TLS klasy Browser-

Najskuteczniejszym podejściem jest korzystanie z bibliotek TLS, które produkują identyczne dla przeglądarki komunikaty ClientHello:

# Python: Use curl_cffi to mimic browser TLS fingerprints
# pip install curl_cffi
from curl_cffi import requests
# Impersonate Chrome's TLS fingerprint
response = requests.get(
    "https://example.com",
    impersonate="chrome",
    proxies={
        "http": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080",
        "https": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
    }
)
print(response.status_code)

2. Użyj utls w Go

// Go: Use uTLS to mimic browser TLS fingerprints
// go get github.com/refraction-networking/utls
package main
import (
    "fmt"
    "io"
    "net/http"
    "net/url"
    "crypto/tls"
    tls2 "github.com/refraction-networking/utls"
)
func main() {
    proxyURL, _ := url.Parse("http://USERNAME:PASSWORD@gate.proxyhat.com:8080")
    transport := &http.Transport{
        Proxy: http.ProxyURL(proxyURL),
        TLSClientConfig: &tls.Config{InsecureSkipVerify: false},
    }
    // uTLS allows you to specify a ClientHelloID that mimics
    // specific browsers (Chrome, Firefox, Safari, etc.)
    // This requires custom dial integration — see uTLS docs
    _ = tls2.HelloChrome_Auto // Example: mimic Chrome
    client := &http.Client{Transport: transport}
    resp, err := client.Get("https://example.com")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body[:100]))
}

3. Użyj Node.js z Custom TLS

// Node.js: Use got-scraping for browser-like TLS
// npm install got-scraping
import { gotScraping } from 'got-scraping';
const response = await gotScraping({
    url: 'https://example.com',
    proxyUrl: 'http://USERNAME:PASSWORD@gate.proxyhat.com:8080',
    headerGeneratorOptions: {
        browsers: ['chrome'],
        operatingSystems: ['windows'],
    }
});
// got-scraping uses custom TLS settings to mimic browser fingerprints
console.log(response.statusCode);

4. Użyj przeglądarek bez głowy

Bezgłowe przeglądarki (Puppeteer, Playwright) produkują autentyczne odciski palców przeglądarki TLS, ponieważ używają prawdziwej przeglądarki TLS stosu. Jest to najbardziej niezawodne ograniczenie, ale również najbardziej zasobochłonne. Zobacz nasz przewodnik skrobanie bez blokowania dla szczegółów konfiguracji.

Testowanie odcisków palców TLS

Przed uruchomieniem swojego scrapera, zweryfikuj jego odcisk palca TLS przed usługami wykrywania:

# Check your JA3 fingerprint against a test service
# Using Python with curl_cffi
from curl_cffi import requests
response = requests.get(
    "https://tls.peet.ws/api/all",
    impersonate="chrome",
    proxies={
        "http": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080",
        "https": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
    }
)
data = response.json()
print(f"JA3 Hash: {data.get('tls', {}).get('ja3_hash', 'N/A')}")
print(f"JA4: {data.get('tls', {}).get('ja4', 'N/A')}")
print(f"HTTP Version: {data.get('http_version', 'N/A')}")
Odcisk palca TLS zależy od biblioteki klienta HTTP, a nie od proxy. Przełączanie się z datacenter na proxy mieszkaniowe zmienia reputację IP, ale nie zmienia podpisu TLS. Obie warstwy muszą być uwzględnione.

HTTP / 2 Drukowanie odcisków palców

Poza TLS protokół HTTP / 2 ujawnia tożsamość klienta poprzez ustawienia połączeń, kolejność ramki nagłówka i ramki priorytetowe. Systemy antybotowe łączą odciski palców TLS i HTTP / 2 dla większej dokładności:

Sygnał HTTP / 2Co odkrywa
Wartości ramki SETTINGSPoczątkowy rozmiar okna, max równoległe strumienie - różni się według klienta
Rozmiar okna _ updateWartość przyrostu kontroli przepływu - unikalna dla każdej implementacji
Kolejność ramki nagłówkaZamawianie nagłówka Pseudo- (: metoda,: władza,: schemat,: ścieżka)
Ramy PRIORYTETOWEUzależnienie od strumienia i waga - wzorce specyficzne dla przeglądarki

Biblioteki takie jak curl_cffi oraz got-scraping adres pobierania odcisków palców HTTP / 2 oprócz pobierania odcisków palców TLS.

Połączenie ograniczenia TLS z rotacją proxy

Skuteczne warstwy strategii antydetekcji TLS pasujące do odcisków palców rotacja proxy wysokiej jakości:

  1. Dopasuj TLS do agenta użytkownika: Jeśli twój agent twierdzi, że Chrome, odcisk palca TLS musi pasować do Chrome.
  2. Użyj proxy mieszkalnych: ProxyHat 's residential proxy zapewnia czyste IP uzupełniające podpisy TLS klasy przeglądarkowej.
  3. Obracaj konsekwentnie: Każda sesja powinna korzystać z dopasowanego profilu IP + TLS + kombinacja agenta użytkownika.
  4. Unikać mieszania bibliotek: Nie należy używać tego samego IP z różnymi odciskami palców TLS - jest to silny sygnał bot.
  5. Badanie przed wdrożeniem: Sprawdzić odcisk palca pasuje do żądanej przeglądarki za pomocą punktów końcowych testu.

Integracja proxy specyficzna dla języka, zobacz nasze przewodniki dla Python, Node.jsoraz Idź..

Rozważania etyczne i prawne

Mimika odcisków palców TLS powinna być używana odpowiedzialnie. Legalne przypadki zastosowania obejmują:

  • Dostęp do publicznie dostępnych danych poprzez standardowe połączenia HTTPS
  • Badania bezpieczeństwa i badania penetracji własnej infrastruktury
  • Zapewnianie zautomatyzowanych testów dokładnie symuluje prawdziwe zachowanie przeglądarki
  • Badania dotyczące prywatności w jaki sposób pobieranie odcisków palców TLS wpływa na śledzenie użytkowników

Zawsze przestrzegaj warunków serwisowych, limitów stawek i obowiązujących przepisów. Zobacz Dokumentacja ProxyHat za odpowiedzialne wytyczne dotyczące stosowania.

Często zadawane pytania

Gotowy, aby zacząć?

Dostęp do ponad 50 mln rezydencjalnych IP w ponad 148 krajach z filtrowaniem AI.

Zobacz cenyProxy rezydencjalne
← Powrót do Bloga