No HTTPS comum, apenas o servidor prova sua identidade com um certificado. O cliente (navegador) e anonimo — o servidor não sabe quem esta se conectando.
Mutual TLS (mTLS) adiciona uma segunda etapa: o cliente também apresenta um certificado. Ambos os lados se autenticam mutuamente. O servidor verifica o certificado do cliente contra uma CA confiavel, e o cliente verifica o do servidor — por isso “mutual” (mutuo).
TLS Regular vs Mutual TLS
| TLS Regular | Mutual TLS (mTLS) | |
|---|---|---|
| Servidor prova identidade | ✅ Certificado + assinatura da CA | ✅ Mesmo |
| Cliente prova identidade | ❌ Anonimo | ✅ Certificado do cliente |
| Autenticação | Unidirecional (apenas servidor) | Bidirecional (ambos) |
| Caso de uso | Sites publicos | APIs internas, zero trust |
| Cliente precisa | Apenas um navegador | Certificado + chave privada |
| Complexidade de configuração | Padrão | Maior — necessário gerenciar certs de clientes |
Quando usar mTLS
Comunicação serviço-a-serviço
Microsservicos se comunicando entre si pela rede. O mTLS garante que apenas serviços autorizados podem se conectar — não apenas qualquer pessoa que conheca a URL.
Service A ←──mTLS──→ Service B
Ambos verificam: "Você e quem diz ser?"
Arquitetura Zero Trust
No zero trust, nenhuma conexão de rede e confiavel por padrão — mesmo dentro da rede corporativa. O mTLS substitui a confiança no nível de rede (firewalls, VPNs) pela confiança no nível de identidade (certificados).
Segurança de API
Proteja APIs sensiveis alem de apenas chaves de API. Uma chave de API roubada pode ser usada por qualquer pessoa. Um certificado de cliente e vinculado a uma chave privada especifica — mais dificil de roubar e usar.
Autenticação de dispositivos IoT
Dispositivos se conectam a um backend com certificados de cliente provisionados durante a fabricacao. O servidor sabe que esta se comunicando com um dispositivo genuino, não com um falsificado.
Como o mTLS funciona
- Cliente se conecta e inicia o handshake TLS (igual ao TLS regular)
- Servidor envia seu certificado — cliente o verifica (igual ao TLS regular)
- Servidor solicita certificado do cliente — envia uma mensagem
CertificateRequest - Cliente envia seu certificado — servidor o verifica contra uma CA confiavel
- Ambos os lados calculam as chaves de sessao e a comunicação criptografada comeca
As etapas 3-4 sao o que torna “mutual”.
Configuração mTLS no Nginx
server {
listen 443 ssl;
server_name api.example.com;
# Certificado do servidor (igual ao HTTPS regular)
ssl_certificate /etc/ssl/server-fullchain.pem;
ssl_certificate_key /etc/ssl/server-privkey.pem;
# Verificação do certificado do cliente
ssl_client_certificate /etc/ssl/client-ca.pem; # CA que assinou certs de clientes
ssl_verify_client on; # Exigir cert do cliente
# Opcional: passar info do cert do cliente para sua aplicação
proxy_set_header X-Client-DN $ssl_client_s_dn;
proxy_set_header X-Client-Verify $ssl_client_verify;
}
mTLS vs outros métodos de autenticação
| Método | Nível de segurança | Complexidade | Melhor para |
|---|---|---|---|
| API key | Baixo (compartilhavel) | Baixa | APIs publicas, rate limiting |
| OAuth/JWT | Medio | Media | APIs voltadas ao usuario |
| mTLS | Alto (vinculado criptograficamente) | Alta | Serviço-a-serviço, zero trust |
| mTLS + JWT | Mais alto | Alta | Autenticação em transporte e aplicação |
mTLS e GetHTTPS
O GetHTTPS emite certificados de servidor — os certificados que seu servidor web usa para provar sua identidade. Estes sao os certificados SSL padrão usados por todo site HTTPS.
Certificados de cliente para mTLS sao tipicamente emitidos por uma CA privada (a CA interna da sua organização), não por uma CA pública como o Let’s Encrypt. O Let’s Encrypt não emite certificados de cliente — ele só emite certificados de servidor para domínios publicos.
Perguntas frequentes
Posso usar o Let’s Encrypt para mTLS?
Para o certificado do servidor: sim. Para certificados de cliente: não. Certs de cliente precisam ser emitidos por uma CA privada que você controla — assim você decide quais clientes sao autorizados. Ferramentas como openssl, cfssl ou step-ca podem atuar como sua CA privada.
O mTLS é o mesmo que “autenticação por certificado de cliente”?
Sim. “Mutual TLS”, “mTLS”, “TLS bidirecional” e “autenticação por certificado de cliente” todos se referem a mesma coisa — ambos os lados apresentam certificados durante o handshake TLS.
O mTLS substitui chaves de API?
Pode, mas servem a propositos diferentes. O mTLS prova a identidade no nível de transporte (qual serviço esta se conectando). Chaves de API/JWTs provam a identidade no nível de aplicação (qual usuario/permissao). Muitos sistemas usam ambos juntos para defesa em profundidade.
Onde o mTLS e comumente usado?
Kubernetes (service mesh com Istio/Linkerd), Cloudflare Access, AWS API Gateway (mutual TLS), BeyondCorp do Google Cloud e a maioria das implementacoes enterprise de zero-trust.