0 XP
Módulo 2 · Redes, HTTP e Nginx

TLS, certificados e HTTPS que não expira de surpresa

Intermediário 35 min+25 XPOpenSSLLet's EncryptNginx

Objetivos desta aula

  • Entender o handshake TLS
  • Inspecionar certificados
  • Automatizar renovação

No handshake TLS o cliente e o servidor negociam versão e cifra, o servidor apresenta a cadeia de certificados e a validação verifica assinatura, nome (SAN) e validade. Falhar em qualquer um desses pontos produz erro no navegador e, pior, erro em integrações que não têm quem clique em 'prosseguir'.

Dois erros dominam a prática: cadeia incompleta (funciona no navegador, falha em cliente HTTP) e certificado expirado. Ambos são detectáveis por comando e ambos são evitáveis por automação com renovação e alerta trinta dias antes do vencimento.

Do lado do Nginx, use TLS 1.2 e 1.3, redirecione HTTP para HTTPS, ative HSTS depois de validar o domínio inteiro e não use protocolos antigos. Terminar TLS no proxy é o padrão: o backend recebe HTTP interno e o proxy informa o esquema original via cabeçalho.

1. O que o TLS garante

TLS entrega três coisas: confidencialidade (ninguém lê no meio), integridade (ninguém altera) e autenticidade (o servidor é quem diz ser). A autenticidade vem do certificado, assinado por uma autoridade (CA) em que o sistema confia.

2. Cadeia de certificados

O servidor deve enviar o seu certificado e os intermediários (fullchain.pem). Se enviar só o certificado final, navegadores podem funcionar por cache, mas curl, apps mobile e integrações falham com 'unable to get local issuer certificate'.

3. Handshake em alto nível

O cliente envia versões e cifras suportadas e o nome desejado (SNI). O servidor escolhe, envia o certificado, ambos combinam uma chave de sessão e a comunicação passa a ser cifrada. Com TLS 1.3 isso leva uma ida e volta.

4. Let's Encrypt e renovação automática

Certificados gratuitos duram 90 dias de propósito: forçam automação. O certbot (ou o cert-manager no Kubernetes) renova sozinho a partir de 30 dias do vencimento. Seu trabalho é garantir que a renovação roda e alertar se falhar.

5. Monitorar validade

Crie um alerta para certificados com menos de 14 dias. É um dos incidentes mais evitáveis e mais constrangedores da profissão.

6. Checagem final

Você deve saber ver emissor e validade com openssl, explicar SNI e confirmar que a cadeia completa está sendo servida.

Na prática

Inspecionar certificado e renovar

bash

echo | openssl s_client -connect api.cloudshop.dev:443 -servername api.cloudshop.dev 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName

# validade em dias
END=$(echo | openssl s_client -connect api.cloudshop.dev:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
echo "expira em: $END"

sudo certbot --nginx -d api.cloudshop.dev --agree-tos -m voce@exemplo.com --non-interactive
sudo certbot renew --dry-run

Nota de segurança: A chave privada do certificado deve ter permissão 600 e dono root. Nunca versione /etc/letsencrypt.

Inspecionar certificado e dias restantes

bash

echo | openssl s_client -connect api.cloudshop.dev:443 -servername api.cloudshop.dev 2>/dev/null \
  | openssl x509 -noout -issuer -subject -dates
# notAfter=Dec 20 12:00:00 2026 GMT   <- data de expiracao
sudo certbot renew --dry-run          # testa a renovacao sem alterar nada
systemctl list-timers | grep certbot  # timer que renova automaticamente

Por que isso importa

Certificado expirado é uma das causas mais comuns e mais evitáveis de indisponibilidade total.

Erro comum

Instalar apenas o certificado do domínio sem a cadeia intermediária.

Dica de produção

Monitore validade como métrica e alerte em 30 dias; não confie apenas no cron de renovação.

Alerta de segurança

Desative TLS 1.0/1.1 e cifras fracas; auditorias reprovam e clientes modernos já não precisam delas.

Pergunta de entrevista

Um cliente Java falha no TLS mas o navegador funciona. Qual sua hipótese principal?

Glossário

SAN
Subject Alternative Name: lista de domínios cobertos pelo certificado.
HSTS
Cabeçalho que obriga o navegador a usar HTTPS no domínio por um período.
SNI
Extensão TLS onde o cliente informa o nome do site, permitindo vários certificados no mesmo IP.
fullchain
Arquivo com o certificado do site mais os intermediários.
ACME
Protocolo usado pelo Let's Encrypt para emitir e renovar certificados automaticamente.

Conexão com o CloudShop

Emitir e renovar automaticamente o certificado de api.cloudshop.dev.

Quiz da aula

  1. 1. Erro de TLS só em clientes não-navegador geralmente indica:

  2. 2. curl falha com 'unable to get local issuer certificate' mas o navegador abre. Causa provável?

  3. 3. Por que certificados Let's Encrypt duram 90 dias?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima