Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

05 - HTTPS e TLS (Handshake, Certificados)

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

HTTPS e TLS (Handshake, Certificados)

1. Definição e Posicionamento

HTTPS (HyperText Transfer Protocol Secure) é HTTP sobre uma conexão protegida por TLS (Transport Layer Security), antigamente conhecido como SSL (Secure Sockets Layer). TLS é um protocolo de camada 6 (Apresentação) que provê confidencialidade, integridade e autenticação para conexões TCP. HTTPS é simplesmente HTTP encapsulado em TLS, tipicamente na porta 443.

Stack de Protocolos

Camada Protocolo
7 - Aplicação HTTP
6 - Apresentação TLS 1.3
4 - Transporte TCP

Versões TLS

Versão RFC Status
SSL 2.0/3.0 6101 Obsoleto (POODLE)
TLS 1.0 2246 Obsoleto (2020)
TLS 1.1 4346 Obsoleto (2020)
TLS 1.2 5246 Aceito (em transição)
TLS 1.3 8446 Recomendado

2. Handshake TLS 1.3

TLS 1.3 reduziu o handshake para 1-RTT (um round-trip), contra os 2-RTT do TLS 1.2. Suporta ainda 0-RTT (early data) para conexões de retorno.

Fluxo 1-RTT

Cliente                                  Servidor
  | ---- ClientHello ------------------->  | (key_share, SNI, ALPN, ciphers)
  | <--- ServerHello --------------------- | (key_share, selected_cipher)
  | <--- EncryptedExtensions/Certificate/CertificateVerify/Finished |
  | ---- Finished -------------------->  |
  | ===== Dados criptografados ========== |

Após o ServerHello, todo o tráfego é criptografado — inclusive o Certificate do servidor. Isso melhora privacidade (certificado não fica visível na rede) e performance.

0-RTT (Early Data)

Em reconexões, o cliente usa uma chave PSK (Pre-Shared Key) derivada de sessão anterior para enviar dados já no primeiro pacote, economizando um RTT. Risco: suscetível a replay attacks — servidor deve aceitar 0-RTT apenas para requisições idempotentes (GET, HEAD); nunca para POST/PUT/DELETE.

Comparação TLS 1.2 vs 1.3

Aspecto TLS 1.2 TLS 1.3
RTT handshake 2 1 (ou 0)
Ciphers CBC, GCM, RSA Apenas AEAD
Troca de chaves RSA, DH, ECDH Apenas ECDHE/DHE (PFS)
Renegociação Sim Não
Certificado visível Sim Não (criptografado)

3. Certificados X.509

Certificado digital X.509v3 contém: versão, número de série, algoritmo de assinatura, emissor (Issuer DN), validade (notBefore, notAfter), sujeito (Subject DN), chave pública (RSA, ECDSA, Ed25519) e extensões (SAN, KeyUsage, BasicConstraints).

Subject Alternative Name (SAN): extensão crítica que lista todos os hostnames cobertos. Browsers ignoram o Common Name (CN) e consideram apenas SAN. Um certificado pode cobrir múltiplos domínios via SAN wildcard (*.exemplo.com) ou listagem explícita.

Cadeia de Confiança

Root CA (auto-assinado, na trust store do SO)
   |
   +-- Intermediate CA
          |
          +-- Server Certificate (ex: *.exemplo.com)

O servidor envia seu certificado + certificados intermediários. O cliente valida a cadeia até chegar a uma Root CA confiável presente no sistema operacional ou no browser.

Tipos de Certificado

Tipo Validação Custo
DV (Domain Validation) Domínio Grátis (Let's Encrypt)
OV (Organization Validation) Domínio + Organização $50-200/ano
EV (Extended Validation) Verificação extendida $200-700/ano

Desde 2019, browsers não exibem mais destaque visual para EV.

4. Autoridades Certificadoras e Let's Encrypt

CAs raiz são pré-instaladas no SO ou browser. Programas de trust store: Mozilla (CA Bundle, usado por Firefox, curl, Python), Microsoft (Windows Root Certificate Program), Apple (macOS/iOS root store), Oracle/Java (cacerts).

Let's Encrypt: CA gratuita, automatizada e aberta, lançada em 2015 pela ISRG. Emitiu mais de 50 milhões de certificados ativos. Usa o protocolo ACME (RFC 8555) para automação.

ACME (Automatic Certificate Management Environment)

Protocolo que automatiza emissão e renovação: (1) cliente gera chave de conta e CSR; (2) pede emissão à CA para o domínio; (3) CA retorna desafios (HTTP-01, DNS-01, TLS-ALPN-01); (4) cliente prova controle do domínio (ex: publica arquivo em /.well-known/acme-challenge/); (5) CA valida, assina certificado, envia ao cliente; (6) instala no servidor web; (7) renovação automática a cada 60 dias (validade: 90 dias).

Ferramentas comuns: certbot, acme.sh, lego (Go), módulo ACME embutido no Caddy.

5. SNI e ALPN

SNI (Server Name Indication)

Permite que o cliente indique o hostname alvo no ClientHello. Isso habilita servidores com múltiplos domínios (virtual hosting) na mesma porta 443 a selecionarem o certificado correto. Sem SNI, um servidor IP só poderia servir um certificado.

ESNI/ECH: Encrypted SNI (ou Encrypted Client Hello, RFC 9460) criptografa o SNI para esconder o hostname de intermediários. Requer DNS HTTPS records publicando a chave pública do servidor. Adoção lenta (2024).

ALPN (Application-Layer Protocol Negotiation)

Permite que cliente e servidor negociem o protocolo de aplicação durante o handshake TLS, sem round-trip adicional. Usado para selecionar entre HTTP/1.1, HTTP/2 e HTTP/3: ClientHello: alpn=[h2, http/1.1] → ServerHello: alpn=h2.

6. Cipher Suites e PFS

Uma cipher suite TLS 1.3 é nomeada como TLS_<cipher>_<hash> (ex: TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256).

Perfect Forward Secrecy (PFS): garante que, mesmo se a chave privada do servidor for comprometida no futuro, sessões anteriores não poderão ser descriptografadas. TLS 1.3 força PFS usando apenas ECDHE ou DHE para troca de chaves — chaves efêmeras descartadas após handshake. RSA key exchange (sem PFS) foi removido.

7. HSTS e HPKP

HSTS (HTTP Strict Transport Security)

Header que instrui o navegador a usar apenas HTTPS para o domínio:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  • max-age: segundos (1 ano típico).
  • includeSubDomains: aplica a subdomínios.
  • preload: autoriza inclusão na lista HSTS Preload do Chrome (embutida no browser, força HTTPS mesmo na primeira visita).

Sem HSTS, um atacante na mesma rede (Wi-Fi público) pode fazer downgrade attack (SSL Strip) redirecionando o usuário para HTTP.

HPKP (HTTP Public Key Pinning): mecanismo que fixava hashes de chaves públicas esperadas. Depreciado em 2018 devido a risco de "brick" do site. Substituído por CAA records.

CAA (Certification Authority Authorization)

Registro DNS que especifica quais CAs estão autorizadas a emitir certificados para o domínio:

exemplo.com.  CAA  0 issue "letsencrypt.org"
exemplo.com.  CAA  0 issuewild ";"

8. Ataques Históricos a TLS

Ataque Versão afetada Mitigação
BEAST (2011) TLS 1.0 CBC TLS 1.2 com GCM
CRIME (2012) TLS com compressão Desativar compressão TLS
POODLE (2014) SSL 3.0 CBC Desativar SSL 3.0
Heartbleed (2014) OpenSSL 1.0.1 Patch (1.0.1g+)
ROBOT (2017) Servidores RSA Desativar RSA key exchange
DROWN (2016) SSLv2 habilitado Desativar SSLv2

9. Ferramentas de Diagnóstico

openssl s_client -connect www.exemplo.com:443 -servername www.exemplo.com
testssl.sh https://www.exemplo.com/   # Teste completo de fraquezas
# SSL Labs (online): https://www.ssllabs.com/ssltest/ (nota A+ a F)
nmap --script ssl-enum-ciphers -p 443 www.exemplo.com

10. Boas Práticas

Habilitar Apenas TLS 1.2 e 1.3

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_ecdh_curve X25519:secp384r1;

OCSP Stapling

ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8;

Permite que servidor entregue prova de que o certificado não foi revogado (OCSP response assinada pela CA), sem o cliente precisar consultar a CA diretamente.

HSTS com Preload e Renovação Automatizada

Após certificar-se de que HTTPS está estável, submeter domínio à HSTS Preload List. Com Let's Encrypt, configurar renovação automática (cron/systemd timer a cada 60 dias).

11. Resumo Técnico

Atributo Valor
Protocolo TLS 1.3 (RFC 8446)
Porta padrão 443
Handshake 1-RTT (ou 0-RTT)
PFS Obrigatório (ECDHE/DHE)
SNI Sim (criptografado via ECH)
ALPN Sim (h2, http/1.1, h3)
CA gratuita Let's Encrypt (ACME)
Header de segurança HSTS, CAA

12. Conclusão

HTTPS e TLS formam a espinha dorsal da web moderna. TLS 1.3 trouxe ganhos em performance (1-RTT, 0-RTT), segurança (apenas AEAD, PFS obrigatório) e privacidade (certificado criptografado). Let's Encrypt democratizou certificados. HSTS, CAA e OCSP Stapling complementam a proteção.