Pular para o conteúdo
Rede · JA3 · JA4 · HTTP/2

Um fingerprint TLS que bate com o user agent

Antes de uma página rodar qualquer JavaScript, o handshake TLS já descreveu o cliente. O handshake do Clearcote é o do próprio Chromium, e os poucos campos que mudam entre versões do Chrome seguem a versão que a persona declara, então a camada de rede e o user agent contam a mesma história.

Em todos os planos, ligado por padrão. Não há nada para configurar.

O padrão já está certo

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"

Destaques

O próprio handshake do Chromium

O BoringSSL do jeito que o Chrome o distribui: a lista de ciphers, os limites de versão e a ordem das extensões a cada conexão são os de verdade, não uma reimplementação.

Segue a versão declarada

Os campos que mudam entre as versões major recentes do Chrome, como o grupo de key share pós-quântico e o codepoint do ALPS, seguem a major declarada em vez de ficar na do próprio build.

Sem emenda entre as camadas

A superfície JavaScript e o handshake vêm de um único navegador, então não há divergência entre um user agent alterado e uma stack de rede intocada.

HTTP/2 da mesma stack

SETTINGS, window updates e a ordem dos headers vêm da própria implementação HTTP/2 do Chromium, não de uma biblioteca cliente separada.

A marca fica nos headers

Edge, Opera e Vivaldi compartilham o handshake do Chromium; a marca vai no user agent e nos client hints, não no ClientHello.

Configurável, raramente necessário

O padrão serve para quase todo mundo. A opção existe para que você nunca fixe uma versão que contradiga a sua versão de marca.

Por que o handshake importa

Um fingerprint TLS (JA3 e o seu sucessor, JA4) resume o ClientHello: quais versões, ciphers, extensões e grupos um cliente oferece, e em que formato. O HTTP/2 adiciona mais uma camada: o frame SETTINGS, os tamanhos de janela e a ordem dos pseudo-headers. Os dois são lidos no servidor, antes de qualquer script rodar, e os dois são baratos de comparar com o user agent.

É nessa comparação que muitas stacks de automação desmoronam. Uma biblioteca HTTP com user agent de Chrome continua enviando o handshake da própria biblioteca, e uma camada stealth em JavaScript muda o que a página lê, mas não o que a rede enviou. O Clearcote é Chromium de ponta a ponta, então não há um segundo cliente por baixo.

O que o Clearcote acrescenta é coerência de versão. Cada release do Chrome muda alguns detalhes do handshake. Quando uma persona declara uma versão do Chrome diferente da do build em que roda, o match-persona ajusta só esses campos para a major declarada e deixa todo o resto como o Chromium gera.

Um user agent falsificado lado a lado com o Clearcote

Automação com user agent falsificado
Clearcote
Handshake
Vem do navegador ou da biblioteca HTTP por baixo
O próprio BoringSSL do Chromium
UA diz ser Chrome X
O handshake é o da versão que estiver realmente rodando
Campos que dependem da versão seguem o Chrome X por padrão
SETTINGS do HTTP/2 e ordem dos headers
Vêm do cliente por baixo
Vêm da stack HTTP/2 do Chromium
Onde o UA é alterado
Um override de header ou um script injetado
No motor, junto com os client hints

Para que as pessoas usam

Sites que pontuam o handshake

Muitas redes de borda leem JA3 ou JA4 antes de a página carregar. Um handshake coerente tira uma contradição da equação.

Uma versão de marca definida por você

Se você define brandVersion numa persona Chrome ou Edge, os principais campos do handshake que dependem da versão acompanham esse valor. O resto do navegador continua reportando a versão real do motor, então deixar brandVersion sem definir continua sendo o padrão coerente.

Pesquisa de rede

Compare como os campos do handshake que dependem da versão mudam entre versões major do Chrome, com o mesmo binário.

O Clearcote foi feito para privacidade, testes, pesquisa e automação lícita. Você é responsável pela forma como o usa e por seguir os termos dos sites que visita.

Qual plano inclui

Em todos os planos, na configuração padrão.

Comparar planos

Perguntas frequentes

O que é um fingerprint JA3 ou JA4?

Um resumo compacto do ClientHello TLS de um cliente: versões, cipher suites, extensões e grupos suportados. Os servidores usam isso para distinguir navegadores de bibliotecas HTTP e para conferir se um cliente é o que o user agent dele diz. Veja as perguntas e respostas sobre JA3 e JA4.

O Clearcote randomiza o fingerprint TLS?

Não. Handshakes aleatórios não batem com nenhum navegador real, o que os torna fáceis de identificar. O próprio Chrome embaralha a ordem das suas extensões TLS a cada conexão, e o Clearcote mantém esse comportamento exatamente como o Chrome faz.

Uma persona Edge ou Opera muda o ClientHello?

Não. Esses navegadores são Chromium por baixo e compartilham o handshake dele. A marca vai no user agent, nos client hints e nos headers, e é lá que o Clearcote a define.

Quando eu mudaria o tlsProfile?

Quase nunca. O match-persona já segue a versão de marca que você declara. Fixe chrome-<major> só se você definir a versão de marca de outra forma, e use native para deixar o handshake do build exatamente como foi compilado.

Vá mais fundo na documentação

Recursos relacionados

Experimente o Clearcote

Plug-and-play no Playwright e no Puppeteer, coerente até o handshake TLS, com um build de código aberto para começar.

Grátis para um navegador com GitHub. Sem cartão.