DevGuideTK
← Trilha Backend

TLS e certificados

Como duas máquinas que nunca se viram combinam uma chave secreta e como o certificado prova a identidade do servidor.

As decisões de TLS são cinco: de onde vêm os certificados, como são renovados, onde o TLS termina, quais versões aceitar e como proteger a comunicação entre os próprios serviços.

De onde vêm os certificados

OrigemExemploCustoQuando usar
Autoridade pública com ACMELet's Encrypt, ZeroSSL, Google Trust ServicesGratuitoSites e APIs públicas: o padrão hoje
Certificado gerenciado pela nuvemAWS Certificate Manager, certificados do balanceador da Google Cloud ou AzureGratuito no balanceador ou CDNQuando o TLS termina num serviço da própria nuvem
Autoridade pública pagaDigiCert, SectigoPagoExigências contratuais ou de validação de organização
Autoridade privadaUma CA interna, step-ca, CA de um service mesh, AWS Private CAOperação própriaServiços internos que não ficam expostos à internet
AutoassinadoGerado com opensslNenhumSó testes locais; nunca entre serviços em produção

O ACME é o protocolo que tornou os certificados gratuitos e automáticos. Um cliente ACME, como o Certbot ou o próprio Caddy, prova à autoridade que controla o domínio e recebe o certificado sem intervenção humana.

Desafio ACMEComo prova o controle do domínioObservação
HTTP-01Publica um arquivo num caminho conhecido do siteExige a porta 80 acessível pela internet
DNS-01Cria um registro TXT no DNS do domínioFunciona para servidores internos e é o único que emite certificados curinga (*.loja.com.br)
TLS-ALPN-01Responde a uma negociação TLS especial na porta 443Usado por alguns proxies

Renovação: certificados vencem

Os certificados públicos têm validade cada vez menor. Os da Let's Encrypt valem 90 dias, e as regras do setor aprovadas em 2025 estão reduzindo a validade máxima por etapas até 47 dias em 2029. Com prazos assim, a renovação manual deixa de ser viável.

AbordagemComo funciona
Proxy que renova sozinhoCaddy e Traefik obtêm e renovam os certificados por ACME, sem configuração extra
Cliente ACME agendadoCertbot ou acme.sh rodam periodicamente e recarregam o servidor
No KubernetesO cert-manager emite e renova certificados como recursos do cluster
Certificado gerenciadoO balanceador ou a CDN da nuvem cuida de tudo

Onde o TLS termina

O tópico de HTTP compara terminar o TLS na borda, num proxy reverso ou na aplicação. O resumo:

OndeQuem cuida do certificadoO que fica sem TLS
CDN ou balanceador gerenciadoO provedorO trecho entre o provedor e a sua rede, salvo se cifrado de novo
Proxy reverso próprioO proxy, geralmente com ACMEO trecho entre o proxy e a aplicação
AplicaçãoCada serviçoNada

Terminar no proxy e deixar o trecho interno sem TLS é comum e aceitável quando esse trecho é uma rede privada, sob o seu controle. Em redes compartilhadas, ou com exigências como as de dados de pagamento e de saúde, o trecho interno também precisa de TLS.

Versões e configuração

VersãoSituação
SSL 2.0, SSL 3.0Quebradas, desligadas em tudo
TLS 1.0, TLS 1.1Obsoletas, removidas pelos navegadores; não aceite
TLS 1.2Aceitável, com conjuntos de cifras modernos
TLS 1.3A preferida: negociação mais rápida e só algoritmos seguros

Para a configuração de um servidor, não escolha cifras uma a uma. Use um perfil pronto, como o perfil "intermediário" do gerador de configuração da Mozilla, que aceita TLS 1.2 e 1.3 com cifras seguras e compatibilidade ampla.

Duas configurações completam o quadro:

  • HSTS (Strict-Transport-Security): um cabeçalho que diz ao navegador para nunca mais acessar o site por HTTP. Evita que um atacante force o primeiro acesso sem TLS.
  • Redirecionar HTTP para HTTPS: a porta 80 só serve para redirecionar e para o desafio HTTP-01 do ACME.

TLS entre serviços e mTLS

No TLS comum, só o servidor apresenta certificado. No TLS mútuo (mTLS), o cliente também apresenta o seu, e cada lado sabe com quem está falando.

TLS comummTLS
Quem prova identidadeSó o servidorServidor e cliente
Autenticação do clientePor token, senha ou chave de API, dentro da conexãoPelo certificado, na própria conexão
Uso típicoSites e APIs públicasComunicação entre serviços internos, integrações bancárias
CustoUm certificado por servidorUm certificado por serviço, emitido e renovado por uma CA interna

Gerenciar certificados de cliente para dezenas de serviços à mão é inviável. Por isso o mTLS costuma vir com um service mesh (Istio, Linkerd) ou com uma CA interna automatizada, que emitem e renovam certificados de vida curta para cada serviço.

Conexões com o banco e outros serviços

O TLS não é só para HTTP. As conexões com o banco carregam os dados mais sensíveis do sistema:

Modo do PostgreSQL (sslmode)CifraConfere o certificadoConfere o nome
disableNãoNãoNão
requireSimNãoNão
verify-caSimSimNão
verify-fullSimSimSim

O modo require parece seguro e tem o mesmo problema de desligar a verificação: cifra a conexão com quem quer que responda. Para conexões que atravessam redes que você não controla, use verify-full, com o certificado da autoridade do banco configurado no cliente. Redis, MySQL, MongoDB e brokers de mensagens têm opções equivalentes.

Resumo da decisão

  1. Certificados públicos: ACME, com renovação automática e alerta de vencimento.
  2. Serviços internos: autoridade privada automatizada; nunca autoassinados em produção.
  3. Versões: TLS 1.2 e 1.3, com um perfil de configuração pronto.
  4. Cadeia: o servidor envia o certificado e o intermediário.
  5. Verificação: sempre ligada nos clientes, inclusive na conexão com o banco.
  6. mTLS: entre serviços, quando a rede não é confiável, com emissão automatizada.

O próximo nível mostra como inspecionar certificados, como confiar numa autoridade privada nas cinco linguagens sem desligar a verificação e como montar uma autoridade de teste.

Prompts para aprofundar

Ao abrir no ChatGPT ou no Claude, o prompt é enviado ao serviço escolhido pela URL e também fica copiado na sua área de transferência.

  • Planejar os certificados do meu sistema

    Quero planejar a obtenção, a instalação e a renovação dos certificados do meu sistema.
    
    Faça estas perguntas, uma por vez:
    - Quais domínios e serviços precisam de TLS, e quais são públicos ou internos?
    - Onde o TLS termina hoje: CDN, balanceador, proxy próprio ou aplicação?
    - Onde o sistema roda: servidor próprio, nuvem, Kubernetes?
    - O DNS dos domínios é gerenciado por um provedor com API?
    
    Com as respostas, recomende para cada caso a origem do certificado (ACME público, certificado gerenciado da nuvem, autoridade privada), o desafio ACME adequado, a ferramenta de renovação e a forma de monitorar o vencimento.
    
    Explique também como a redução da validade máxima dos certificados públicos nos próximos anos afeta o plano.
  • Configurar o TLS de um servidor

    Quero configurar o TLS de um servidor corretamente.
    
    Pergunte qual servidor eu uso (Nginx, Caddy, Traefik, a própria aplicação) e quais clientes precisam acessá-lo.
    
    Explique, com a configuração para o meu caso:
    1. Quais versões do TLS aceitar e por quê.
    2. Por que usar um perfil pronto de cifras em vez de escolher uma a uma, e qual perfil usar.
    3. Como montar o arquivo com a cadeia completa e conferir que o intermediário está sendo enviado.
    4. Redirecionamento de HTTP para HTTPS e o cabeçalho HSTS, com os cuidados antes de ativá-lo.
    5. Como testar a configuração com openssl s_client e com uma ferramenta de análise externa.
  • TLS entre serviços internos e mTLS

    Quero decidir como proteger a comunicação entre os serviços internos do meu sistema.
    
    Pergunte como os serviços se comunicam, onde rodam e se a rede entre eles é compartilhada com outros sistemas.
    
    Explique:
    1. Quando é aceitável deixar o tráfego interno sem TLS, e quando não é.
    2. A diferença entre TLS comum e mTLS, e o que o mTLS acrescenta em autenticação.
    3. Como emitir e renovar certificados para muitos serviços: autoridade privada automatizada, service mesh, ou certificados gerenciados.
    4. Como configurar TLS com verificação completa nas conexões com o banco de dados e os brokers, e por que o modo require não basta.
    
    Termine com uma recomendação para o meu caso, com o esforço de implantação.