TLS Fingerprinting Explicado: JA3, JA4 e Como Evitar Deteccao

Saiba como a impressão digital TLS revela sua identidade de raspador através de hashes JA3/JA4, análise de suítes cifradas e sinais HTTP/2 — além de estratégias de mitigação usando bibliotecas TLS de grau navegador.

TLS Fingerprinting Explicado: JA3, JA4 e Como Evitar Deteccao

O que é impressão digital TLS?

A impressão digital TLS é uma técnica de detecção passiva que identifica clientes com base em como eles iniciam conexões criptografadas. Toda vez que seu raspador, navegador ou biblioteca HTTP se conecta a um site sobre HTTPS, ele envia uma mensagem TLS ClientHello contendo suítes de cifra, extensões, curvas elípticas e outros parâmetros em uma ordem específica. Sistemas anti-bot analisam este aperto de mão para determinar se o cliente de conexão corresponde ao que seu usuário-agente afirma ser.

Diferente impressão digital do navegador, que requer execução JavaScript, TLS impressão digital funciona na camada de rede — antes de qualquer conteúdo de página é entregue. Isto torna-se um dos primeiros e mais difíceis sinais de detecção para escapar, como coberto em nosso guia abrangente para como sistemas anti-bots detectam proxies.

Como funcionam os apertos de mão TLS

Antes de quaisquer dados HTTP serem trocados por HTTPS, o cliente e o servidor realizam um aperto de mão TLS. A primeira mensagem crítica — o ClientHello — contém tudo o que os sistemas anti-bots precisam para impressão digital:

  1. Versão do TLS: A versão TLS máxima que o cliente suporta (por exemplo, TLS 1.2, TLS 1.3).
  2. Suítes de cifra: Uma lista ordenada de algoritmos de criptografia que o cliente está disposto a usar.
  3. Extensões: Recursos adicionais como Indicação de Nome do Servidor (SNI), ALPN, algoritmos de assinatura e grupos de compartilhamento de chaves.
  4. Curvas elípticas: Tipos de curva suportados para troca de chaves (por exemplo, x25519, secp256r1).
  5. Métodos de compressão: Tipicamente nulas em implementações modernas, mas sua presença ou ausência ainda é um sinal.

Cada biblioteca HTTP, navegador e linguagem de programação runtime produz um padrão ClientHello distinto. Chrome, Firefox, Safari, Python's requests, Go's net/http, e Node.js cada um tem assinaturas reconhecíveis.

Impressão digital JA3

JA3 é o método de impressão digital TLS mais amplamente implantado. Desenvolvido por engenheiros da Salesforce, cria um hash MD5 de cinco campos na mensagem ClientHello:

Impressão digital JA3
CampoDesignação das mercadoriasValores de Exemplo
Versão do TLSA versão do protocolo oferecida771 (TLS 1.2), 772 (TLS 1.3)
Suítes CifraLista ordenada de códigos de suite cifrados4865-4866-4867-49195-49199...
ExtensõesLista de códigos de tipo de extensão0-23-65281-10-11-35-16-5...
Curvas elípticasGrupos nomeados suportados29-23-24
Formatos dos Pontos CETipos de formato de ponto suportados0

Esses cinco valores são concatenados com vírgulas e hashed para produzir uma impressão digital JA3 de 32 caracteres. Por exemplo, Python's requests biblioteca produz um hash JA3 diferente do Chrome, mesmo quando ambos definem a mesma string usuário-agente.

JA3 Detecção na Prática

# 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 — A Próxima Geração

JA4, também da Salesforce, melhora no JA3 produzindo uma impressão digital mais legível e robusta. Em vez de um hash MD5 opaco, JA4 cria um identificador estruturado com três componentes:

  • JA4 a: Tipo de protocolo + versão TLS + presença SNI + contagem de cifras + contagem de extensões + primeiro valor ALPN (por exemplo, "t13d1517h2 8daaf6152771 b0da82dd1658").
  • JA4 b: Um hash truncado de suites cifradas.
  • JA4 c: Hash truncado ordenado de extensões (com SNI e ALPN removidos para reduzir a variabilidade).

JA4 é mais difícil de enganar porque incorpora sinais adicionais e usa um formato que resiste a uma simples correspondência de hash.

Impressões digitais TLS comuns por cliente

Impressões digitais TLS comuns por cliente
ClienteBiblioteca TLSTraços ReconhecíveisRisco de detecção
Chrome (último)ChatoSSLOrdem de cifra específica, valores GREASE, suporte ECHBaixo (se corresponder correctamente)
FirefoxNSSPreferência de cifra diferente, extensão de credenciais delegadasBaixo (se corresponder correctamente)
Pedidos em PythonOpenSSL (via urllib3)Falta o GREASE, menos extensões, ordem de cifra do OpenSSLMuito Alto
Ir para a rede/httpIr cripto/tlsOrdem de cifra única, faltando muitas extensõesMuito Alto
Node.js (áxios/got)OpenSSL (via Nó)Ordem de extensão específica do nó, faltando GREASEAlta
curlVariações (OpenSSL/NSS/etc.)Depende da compilação, mas normalmente não- navegador impressão digitalAlta

Por que a impressão digital TLS é difícil de evitar

A impressão digital TLS apresenta desafios únicos em comparação com outros métodos de detecção:

  • Detecção em camadas de rede: Opera antes de qualquer conteúdo HTTP ser trocado, por isso não pode ser derrotado por injeção JavaScript ou manipulação de cabeçalho.
  • Assinatura do nível da biblioteca: A impressão digital é determinada pela biblioteca TLS compilada em seu tempo de execução, não pelo seu código de aplicação. Mudar a string usuário- agente tem efeito zero na impressão digital TLS.
  • Transparência do proxy: Proxies HTTP/HTTPS padrão (incluindo proxies residenciais) encaminhar o aperto de mão TLS do cliente para o servidor, para que a origem veja a verdadeira impressão digital TLS do seu cliente.
  • Engate de versão: Cada versão menor de uma biblioteca TLS pode produzir uma impressão digital ligeiramente diferente, tornando as versões desiguais detectáveis.

Estratégias de Mitigação de Impressões Digitais TLS

1. Use Bibliotecas TLS de Grau de Navegador

A abordagem mais eficaz é usar bibliotecas TLS que produzem navegador-identical ClientHello mensagens:

# 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. Use utls em 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. Use Node.js com TLS personalizado

// 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. Use navegadores sem cabeça

Navegadores sem cabeça (Puppeteer, Playwright) produzem impressões digitais TLS autênticos do navegador porque usam a pilha TLS do navegador real. Essa é a mitigação mais confiável, mas também a mais intensiva em recursos. Veja nosso guia para raspagem sem bloqueio para detalhes de configuração.

Testando sua impressão digital do TLS

Antes de implantar seu raspador, verifique sua impressão digital TLS contra serviços de detecção:

# 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')}")
Sua impressão digital TLS é determinada pela sua biblioteca de clientes HTTP, não pelo seu proxy. Mudar de datacenter para proxies residenciais muda sua reputação de IP, mas não muda sua assinatura TLS. Ambas as camadas devem ser abordadas.

Impressão digital HTTP/2

Além do TLS, o próprio protocolo HTTP/2 revela a identidade do cliente através de configurações de conexão, ordem de frame do cabeçalho e quadros de prioridade. Os sistemas anti-bot combinam impressões TLS e HTTP/2 para maior precisão:

Impressão digital HTTP/2
Sinal HTTP/2O Que Revela
Fixação de valores de quadrosTamanho inicial da janela, max fluxos simultâneos — difere por cliente
Tamanho da janela updateValor de incremento do controle de fluxo – único para cada implementação
Ordem do quadro do cabeçalhoOrdenamento do cabeçalho (:método,:autoridade, :scheme, :path)
Quadros de prioridadeFluxo de dependência e peso — padrões específicos do navegador

Bibliotecas como curl_cffi e got-scraping endereço HTTP/2 impressão digital, além de TLS impressão digital.

Combinando Mitigação TLS com Rotação Proxy

Uma estratégia antidetecção eficaz camadas TLS impressão digital combinando com rotação proxy de alta qualidade:

  1. Coincidir o TLS com o agente do usuário: Se seu agente de usuário reivindica Chrome, sua impressão digital TLS deve corresponder ao Chrome.
  2. Usar proxies residenciais: Proxies residenciais do ProxyHat fornecer IPs limpos que complementam assinaturas TLS de grau de navegador.
  3. Rodar consistentemente: Cada sessão deve usar um IP + perfil TLS correspondente + combinação usuário-agente.
  4. Evite misturar bibliotecas: Não reutilize o mesmo IP com impressões digitais TLS diferentes — este é um sinal de bot forte.
  5. Ensaio antes da implantação: Verifique se sua impressão digital corresponde ao seu navegador reivindicado usando endpoints de teste.

Para integração de proxys específicos de linguagem, consulte nossos guias para Python, Node.js, e Vai..

Considerações éticas e legais

O mimetismo das impressões digitais TLS deve ser utilizado com responsabilidade. Casos de uso legítimo incluem:

  • Acessando dados disponíveis publicamente através de conexões HTTPS padrão
  • Pesquisa de segurança e teste de penetração de sua própria infraestrutura
  • Garantir que seus testes automatizados simulam com precisão o comportamento real do navegador
  • Pesquisa de privacidade estudando como TLS impressão digital afeta o rastreamento do usuário

Sempre respeite os termos de serviço do site, limites de taxa e regulamentos aplicáveis. Consultar Documentação do ProxyHat Para as orientações de utilização responsáveis.

Perguntas Frequentes

Pronto para começar?

Acesse mais de 50M de IPs residenciais em mais de 148 países com filtragem por IA.

Ver preçosProxies residenciais
← Voltar ao Blog