Chuyển đến nội dung
Mạng · JA3 · JA4 · HTTP/2

TLS fingerprint khớp với user agent

Trước khi trang chạy bất kỳ dòng JavaScript nào, TLS handshake đã mô tả client rồi. Handshake của Clearcote chính là của Chromium, và số ít trường thay đổi giữa các phiên bản Chrome sẽ theo phiên bản mà persona khai báo, nên tầng mạng và user agent kể cùng một câu chuyện.

Có ở mọi gói, bật sẵn theo mặc định. Không có gì phải cấu hình.

Mặc định đã đúng sẵn

import { launch } from "clearcote";

// default: the ClientHello follows the persona's claimed Chrome major
const browser = await launch({ fingerprint: "account-42", tlsProfile: "match-persona" });

// or pin a major (only together with a matching brandVersion), or leave the build's own TLS untouched:
//   tlsProfile: "chrome-150"
//   tlsProfile: "native"

Điểm nổi bật

Handshake của chính Chromium

BoringSSL đúng như Chrome phát hành: danh sách cipher, giới hạn phiên bản và thứ tự extension theo từng kết nối đều là hàng thật, không phải bản viết lại.

Theo đúng phiên bản được khai báo

Các trường khác nhau giữa những bản Chrome major gần đây, như nhóm key-share hậu lượng tử (post-quantum) và codepoint ALPS, sẽ theo bản major được khai báo thay vì giữ nguyên theo bản build.

Không có đường nối giữa các tầng

Bề mặt JavaScript và handshake đến từ cùng một trình duyệt, nên không có sự lệch nhau giữa một user agent đã bị vá và một network stack chưa được vá.

HTTP/2 từ cùng một stack

SETTINGS, window update và thứ tự header đến từ chính phần hiện thực HTTP/2 của Chromium, không phải một thư viện client riêng.

Brand nằm trong header

Edge, Opera và Vivaldi dùng chung handshake của Chromium; brand nằm trong user agent và client hint, không nằm trong ClientHello.

Cấu hình được, nhưng hiếm khi cần

Mặc định phù hợp với hầu hết mọi người. Tùy chọn này tồn tại để bạn không bao giờ ghim một phiên bản mâu thuẫn với brand version của mình.

Vì sao handshake quan trọng

TLS fingerprint (JA3, và phiên bản kế nhiệm JA4) tóm tắt ClientHello: client đưa ra những phiên bản, cipher, extension và group nào, và ở dạng nào. HTTP/2 thêm một lớp nữa: frame SETTINGS, kích thước window và thứ tự pseudo-header. Cả hai đều được đọc ở phía server, trước khi bất kỳ script nào chạy, và đều dễ dàng đem so với user agent.

Chính phép so sánh đó là chỗ nhiều stack automation bị lộ. Một thư viện HTTP mang user agent Chrome vẫn gửi handshake của chính thư viện đó, và một lớp stealth JavaScript thay đổi những gì trang đọc được chứ không thay đổi những gì đã được gửi qua mạng. Clearcote là Chromium từ đầu đến cuối, nên không có client thứ hai nào bên dưới.

Điều Clearcote bổ sung là tính nhất quán về phiên bản. Mỗi bản phát hành Chrome thay đổi một vài chi tiết trong handshake. Khi persona khai báo một phiên bản Chrome khác với bản build đang chạy, match-persona chỉ điều chỉnh đúng những trường đó theo bản major được khai báo, và giữ nguyên mọi thứ khác như Chromium tạo ra.

User agent giả mạo so với Clearcote

Automation với user agent giả mạo
Clearcote
Handshake
Từ trình duyệt hoặc thư viện HTTP bên dưới
BoringSSL của chính Chromium
UA khai báo Chrome X
Handshake đến từ phiên bản thực sự đang chạy, dù đó là phiên bản nào
Các trường phụ thuộc phiên bản mặc định theo Chrome X
HTTP/2 SETTINGS và thứ tự header
Từ client bên dưới
Từ stack HTTP/2 của Chromium
UA được thay đổi ở đâu
Ghi đè header hoặc script được inject
Trong engine, cùng với client hint

Mọi người dùng nó để làm gì

Site chấm điểm handshake

Nhiều mạng edge đọc JA3 hoặc JA4 trước khi trang được tải. Một handshake nhất quán loại bỏ một mâu thuẫn khỏi bức tranh tổng thể.

Brand version do bạn tự đặt

Nếu bạn đặt brandVersion cho persona Chrome hoặc Edge, các trường handshake chính phụ thuộc phiên bản sẽ theo nó. Phần còn lại của trình duyệt vẫn báo cáo đúng phiên bản thực của engine, nên để trống brandVersion vẫn là mặc định nhất quán.

Nghiên cứu mạng

So sánh cách các trường handshake phụ thuộc phiên bản thay đổi qua các bản Chrome major, với cùng một binary.

Clearcote được xây dựng cho quyền riêng tư, kiểm thử, nghiên cứu và tự động hóa hợp pháp. Bạn chịu trách nhiệm về cách mình sử dụng nó và về việc tuân thủ điều khoản của các trang web bạn truy cập.

Gói nào có tính năng này

Có ở mọi gói, với thiết lập mặc định.

So sánh các gói

Câu hỏi thường gặp

Fingerprint JA3 hay JA4 là gì?

Là bản tóm tắt gọn của TLS ClientHello mà client gửi: các phiên bản, cipher suite, extension và supported group. Server dùng nó để phân biệt trình duyệt với thư viện HTTP và để kiểm tra xem client có đúng là thứ mà user agent của nó khai báo hay không. Xem phần Hỏi & Đáp về JA3 và JA4.

Clearcote có ngẫu nhiên hóa TLS fingerprint không?

Không. Handshake ngẫu nhiên không khớp với bất kỳ trình duyệt thật nào, nên rất dễ bị nhận ra. Bản thân Chrome xáo trộn thứ tự các TLS extension ở mỗi kết nối, và Clearcote giữ nguyên hành vi đó đúng như Chrome.

Persona Edge hay Opera có làm thay đổi ClientHello không?

Không. Bên dưới, các trình duyệt đó đều là Chromium và dùng chung handshake của nó. Brand nằm trong user agent, client hint và header, và đó cũng là nơi Clearcote đặt nó.

Khi nào cần thay đổi tlsProfile?

Hầu như không bao giờ. match-persona đã tự theo brand version mà bạn khai báo. Chỉ ghim chrome-<major> nếu bạn đặt brand version theo cách khác, và dùng native để giữ nguyên handshake của bản build đúng như khi biên dịch.

Tìm hiểu sâu hơn trong tài liệu

Tính năng liên quan

Dùng thử Clearcote

Thay thế drop-in cho Playwright & Puppeteer, nhất quán đến tận TLS handshake, với một bản build mã nguồn mở để bắt đầu.

Miễn phí cho một trình duyệt với GitHub. Không cần thẻ.