Giải thích về fingerprinting TLS JA3 và JA4 (và cách kiểm tra của bạn)

Đăng ngày 4 tháng 6 2026 · ≈9 phút đọc

Scraper của bạn gửi header Chrome hoàn hảo, chạy sau một IP dân cư sạch, mà vẫn nhận 403 ngay yêu cầu đầu tiên. Không captcha, không trang challenge, không gì để giải. Trang web đã nhận diện bạn trước khi một byte HTTP nào được trao đổi — trong lúc bắt tay TLS.

Bài viết này giải thích cách fingerprinting JA3 và JA4 thực sự hoạt động, vì sao chúng là cỗ máy thầm lặng của mọi hệ thống anti-bot lớn trong năm 2026, và cách xem dấu vân tay của chính bạn trong mười giây. Nếu bạn muốn công cụ vượt qua trước, chúng tôi đã trình bày trong Vượt qua fingerprinting TLS với curl_cffi & tls-client — đây là bài đồng hành về cách phía phát hiện hoạt động.

Bài kiểm tra mười giây

Trước khi đến lý thuyết, hãy nhìn vào cú bắt tay của chính bạn. Mở trình kiểm tra JA3/JA4 miễn phí của chúng tôi — nó vọng lại dấu vân tay TLS mà client của bạn vừa trình ra và cho biết nó khớp với cái gì:

# From a terminal - see what curl's TLS looks like:
curl https://www.jibaoproxy.com/tools/fingerprint.html

# Then open the same URL in Chrome and compare.

Chạy cả hai và bạn sẽ thấy điểm mấu chốt của toàn bộ bài viết này: curl và Chrome tạo ra những dấu vân tay hoàn toàn khác nhau, bất kể bạn đặt header User-Agent nào.

Điều gì xảy ra trong một cú bắt tay TLS

Mọi kết nối HTTPS đều bắt đầu bằng một thông điệp ClientHello, gửi ở dạng rõ trước khi bất kỳ mã hóa nào bắt đầu. Trong đó, client của bạn công bố:

Đây là điểm cốt lõi của việc phát hiện: các danh sách này và thứ tự chính xác của chúng được khắc sẵn vào thư viện TLS mà client của bạn được biên dịch dựa trên đó. BoringSSL của Chrome công bố một tổ hợp cụ thể. OpenSSL của Python công bố một tổ hợp khác. crypto/tls của Go là cái thứ ba. Bạn không thể thay đổi điều này bằng header — nó được thương lượng bên dưới lớp HTTP, bởi chính thư viện.

JA3: Băm cú bắt tay

JA3 (Salesforce, 2017) nối năm trường ClientHello — phiên bản TLS, cipher, tiện ích mở rộng, đường cong, định dạng điểm — thành một chuỗi rồi băm MD5:

771,4865-4866-4867-49195-49199,0-23-65281-10-11-35-16,29-23-24,0
              |
              v  MD5
        cd08e31494f9531f560d64c695473da9

Một hash cho mỗi stack TLS. Mọi bản Chrome 137 trên Windows tạo ra (gần như) cùng một JA3; mọi python-requests trên OpenSSL 3.x tạo ra cùng một JA3 khác. Bên phòng thủ duy trì các bảng tra cứu: hash X = Chrome, hash Y = requests, hash Z = bot Go. Nếu User-Agent nói Chrome nhưng JA3 nói OpenSSL, bạn bị chặn — ngay lập tức, âm thầm, rẻ tiền.

JA4: Tiêu chuẩn của năm 2026

JA3 có vấn đề: Chrome bắt đầu ngẫu nhiên hóa thứ tự tiện ích mở rộng năm 2023 (làm hỏng JA3 ngây thơ), và MD5 thì vô cấu trúc — một hash chẳng nói gì về vì sao hai client khác nhau. JA4 (FoxIO, 2023) khắc phục cả hai và là thứ mà các nhà cung cấp nghiêm túc chạy hôm nay:

JA4 = t13d1516h2_8daaf6152771_b0da82dd1658
       |            |             |
       a: protocol  b: ciphers    c: extensions
       (TLS 1.3, 16 ciphers,      (sorted, truncated
        h2 ALPN, domain SNI)       SHA256)

Ai dùng điều này để chống lại bạn

Mọi hệ thống quan trọng: Cloudflare phơi bày JA3/JA4 trực tiếp trong các quy tắc quản lý bot của nó; DataDome và PerimeterX đưa nó vào chấm điểm lớp mạng của họ (xem hướng dẫn DataDome/PerimeterX của chúng tôi); Akamai đã chạy fingerprinting TLS lâu hơn bất kỳ ai. Nó phổ biến vì tính toán miễn phí, không thể giả mạo từ lớp HTTP, và bắt được 90% tự động hóa ngây thơ — mọi script requests/httpx/axios/Go-http từng được viết — trước khi bất kỳ JavaScript nào cần chạy.

Vì sao chỉ một proxy thôi không giúp được

Điều này khiến nhiều người ngạc nhiên: một proxy thay đổi IP của bạn, nhưng cú bắt tay TLS của bạn đi qua mà không thay đổi. Đường hầm CONNECT (hay luồng SOCKS5) mang các byte ClientHello của bạn nguyên văn đến mục tiêu. IP dân cư + JA3 thư viện-requests = "một bot chạy trên một IP dân cư." Tốt hơn IP trung tâm dữ liệu, vẫn là một bot.

IP và dấu vân tay TLS là các tín hiệu độc lập và bạn cần cả hai đều sạch:

IPDấu vân tay TLSPhán quyết trong năm 2026
Trung tâm dữ liệuThư viện (requests/Go)Bị chặn ở mọi nơi quan tâm
Dân cưThư việnBị chặn trên các trang kiểm tra JA4
Trung tâm dữ liệuGiả mạo trình duyệtBị chặn vì danh tiếng IP
Dân cưGiả mạo trình duyệtVượt qua các kiểm tra lớp mạng

Làm cho dấu vân tay khớp với câu chuyện của bạn

Hai con đường, tùy theo công cụ:

HTTP client — dùng một thư viện giả mạo tái hiện đúng ClientHello của trình duyệt: curl_cffi (Python), tls-client (Python/Go), got-scraping (Node). Mã hoạt động đầy đủ trong hướng dẫn curl_cffi:

from curl_cffi import requests

r = requests.get(
    "https://target.example",
    impersonate="chrome",
    proxies={"https": "socks5h://USERNAME:[email protected]:913"},
)

Trình duyệt thật (Playwright, browser agent, trình duyệt chống phát hiện) — không có gì phải làm ở lớp TLS; dấu vân tay đúng thật là của Chrome. Rủi ro của bạn nằm ở nơi khác: danh tiếng IP và phát hiện CDP.

Sau đó hãy xác minh, đừng cho rằng đúng. Phiên bản trôi dạt — một thư viện giả mạo bị ghim vào cú bắt tay của Chrome 120 đọc ra như "trình duyệt lỗi thời đáng ngờ" trong năm 2026. Kiểm tra lại sau mỗi lần cập nhật phụ thuộc:

Công cụ miễn phí · không cần đăng ký

Xem JA3 / JA4 của bạn ngay bây giờ

Trình kiểm tra của chúng tôi vọng lại dấu vân tay TLS mà client của bạn trình ra, nhận diện nó khớp với stack nào (Chrome / Firefox / OpenSSL / Go), và đánh dấu sự không khớp UA-vs-TLS — chính xác phép kiểm tra mà các hệ thống anti-bot chạy.

Kiểm tra dấu vân tay TLS của tôi →

Dấu vân tay sạch mà vẫn bị chặn? Nửa còn lại là danh tiếng IP — kiểm tra IP dân cư với 500MB tín dụng miễn phí →

Tóm tắt

Dấu vân tay sạch, IP sạch

Ghép TLS giả mạo của bạn với IP dân cư — 500MB tín dụng miễn phí, không cần thẻ.

Bắt đầu dùng thử miễn phí

Cho mọi sản phẩm IP · một kho node khổng lồ luôn sẵn sàng bất cứ lúc nào

Đăng ký ngay và nhận tới 100% hoàn tiền cho lần nạp của bạn

Người dùng mới nhận 500MB khi đăng ký, cùng tiền thưởng cho lần nạp đầu tiên. Ưu đãi có thời hạn.