Como HTTPS e TLS realmente funcionam: um guia prático

Security2026-11-02TryQuickToolBox

Você já viu o ícone de cadeado no seu navegador e sabe que HTTPS é importante. Mas você realmente entende o que acontece quando um navegador se conecta a um site HTTPS? Muitos desenvolvedores tratam o TLS como uma caixa preta—configuram uma vez e esquecem. Isso funciona até algo quebrar, o desempenho sofrer ou uma auditoria de segurança revelar configurações incorretas.

Este guia explica HTTPS e TLS em termos práticos. Você aprenderá o processo de handshake, como os certificados estabelecem confiança e os passos para implementar TLS corretamente em seus servidores. Sem excesso de jargão—apenas os conceitos necessários para depurar problemas e tomar decisões informadas.

O que HTTPS realmente é

HTTPS é o HTTP sobre TLS (Transport Layer Security). Ele fornece três garantias:

TLS é o protocolo que torna isso possível. SSL é seu predecessor—você ainda verá "certificados SSL" no marketing, mas os sistemas modernos usam TLS (atualmente TLS 1.3 é o mais recente).

O handshake TLS: passo a passo

Antes que qualquer dado HTTP flua, o cliente e o servidor realizam um handshake para concordar com os parâmetros de criptografia e verificar identidades. Aqui está o fluxo simplificado para TLS 1.3, o padrão moderno:

  1. Client Hello: O navegador envia uma lista de suítes de cifras suportadas, versões TLS e um valor aleatório (client random).
  2. Server Hello: O servidor escolhe uma suíte de cifras, envia seu próprio valor aleatório (server random) e fornece sua cadeia de certificados.
  3. Troca de chaves: Usando Diffie-Hellman efêmero (ou similar), ambas as partes derivam um segredo compartilhado sem transmiti-lo diretamente. Isso fornece sigilo forward secrecy—comprometer a chave privada do servidor posteriormente não descriptografará sessões passadas.
  4. Verificação do certificado: O cliente verifica o certificado contra CAs raiz confiáveis, valida o nome de domínio e verifica o status de expiração e revogação.
  5. Finished: Ambos os lados enviam um MAC (código de autenticação de mensagem) para confirmar que o handshake não foi adulterado. O tráfego HTTP criptografado começa.

O TLS 1.3 reduziu o handshake para uma viagem de ida e volta (1-RTT) e suporta retomada 0-RTT para visitantes recorrentes, melhorando a latência. O TLS 1.2 exigia duas viagens de ida e volta.

Certificados: a âncora de confiança

Um certificado TLS vincula uma chave pública a um nome de domínio e é assinado por uma Autoridade Certificadora (CA). Quando seu navegador se conecta a example.com, ele verifica se o certificado:

Você pode obter certificados gratuitamente do Let's Encrypt, que emite certificados de 90 dias via protocolo ACME. Ferramentas de automação como o Certbot cuidam da renovação. Para serviços internos, você pode executar sua própria CA, mas os clientes devem confiar nela explicitamente.

Configurando TLS em seu servidor

A configuração adequada equilibra segurança, compatibilidade e desempenho. Aqui está uma lista de verificação:

Para o Nginx, uma configuração segura mínima se parece com isto:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
    ssl_prefer_server_ciphers off;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;

    add_header Strict-Transport-Security "max-age=63072000" always;

    location / {
        proxy_pass http://localhost:3000;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

Teste sua configuração com ferramentas como o SSL Test do SSL Labs ou testssl.sh. Mire na nota A, mas não persiga pontuações perfeitas às custas de quebrar clientes mais antigos se você precisar suportá-los.

Armadilhas comuns e como evitá-las

FAQ

Qual é a diferença entre HTTPS e TLS?

HTTPS é HTTP sobre TLS. TLS é o protocolo criptográfico que fornece criptografia, autenticação e integridade. Você não pode ter HTTPS sem TLS.

Preciso de um certificado separado para www e não-www?

Você pode incluir ambos no campo Subject Alternative Names (SAN) de um único certificado. A maioria das CAs emite certificados cobrindo ambos por padrão ou com uma configuração simples.

Com que frequência devo renovar meus certificados TLS?

Siga o período de validade da CA—90 dias para Let's Encrypt. Automatize a renovação com um cron job ou timer systemd. Renove imediatamente se uma chave privada for comprometida.

Pronto para inspecionar seu tráfego web? Use o Analisador de Logs Nginx para analisar logs de acesso e verificar requisições HTTPS, códigos de status e possíveis problemas.