Camada Zero · 20 · TLS & o Handshake

O cadeado do navegador é um handshake. Antes de mandar um byte de dado, cliente e servidor negociam uma cifra, provam identidade com certificado e combinam uma chave secreta. Roda o handshake aqui embaixo e veja a troca acontecer passo a passo.
🧑‍💻 CLIENTESERVIDOR 🖥
Round trips
Canal
TLS 1.3Versão
Root CA (já confiável no seu device)
DigiCert Global Root G2
↓ assina
Intermediário
DigiCert TLS RSA SHA256 2020 CA1
↓ assina
Folha (apresentado pelo servidor)
CN = exemplo.com ✓ válido
Escolhe a versão e clica em iniciar. Depois testa o "Tentar MITM" e veja a validação do certificado barrar o impostor.
cliente → servidor servidor → cliente certificado / chave (assimétrico) dados (simétrico) bloqueado
O TLS resolve dois problemas de uma vez: identidade (você fala mesmo com exemplo.com?) e sigilo (ninguém no meio lê os dados). A sacada é misturar dois tipos de cripto.
CriptoPra quêCusto
Assimétricatrocar a chave de sessão com segurançalenta
Simétricacifrar os dados de fatorápida
A cadeia de certificados (folha → intermediário → root CA) é o que prova a identidade: alguém em quem seu device já confia avaliza que aquela chave pública é mesmo do domínio.

Servidor HTTPS em Go

// O handshake TLS é transparente pro seu código:
srv := &http.Server{Addr: ":443"}
log.Fatal(srv.ListenAndServeTLS("cert.pem", "key.pem"))

Cliente: validação é o default

resp, err := http.Get("https://exemplo.com")
// O footgun clássico: desligar a validação.
// InsecureSkipVerify abre a porta pra MITM.
tr := &http.Transport{
    TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // NUNCA em prod
}

🧠 Desafio — TLS & o Handshake

Roda o handshake e a tentativa de MITM aqui de cima antes de responder. As duas últimas são de reflexão: escreve a sua e só então revela o modelo.

🔧 Prática — ache o bug

Esse cliente HTTPS tem um furo de segurança clássico. Clica na linha do bug.