Solução de problemas DANE/TLSA: diagnosticar e corrigir os erros mais comuns
Por CaptainDNS
Publicado em 23 de fevereiro de 2026

- Os 5 erros DANE mais comuns: DNSSEC ausente, hash TLSA desatualizado, nome DNS errado, STARTTLS mal configurado, propagação incompleta
- Comandos essenciais:
dig +dnssec,openssl s_client -starttls smtp,postfix/smtpd[]: TLSnos logs - A renovação do certificado Let's Encrypt é a causa nº 1 das falhas DANE em produção
- Nosso DANE TLSA Checker identifica automaticamente esses problemas
- Os relatórios TLS-RPT (RFC 8460) sinalizam falhas DANE antes que seus contatos o alertem
Você implantou DANE/TLSA no seu servidor de email seguindo as boas práticas, tudo estava funcionando, e então um dia os emails começam a ser recusados por alguns destinatários. A mensagem de erro menciona "failed DANE validation" ou "TLSA record not found", mas os logs não informam exatamente o que mudou.
Esse cenário é o cotidiano dos administradores DANE. A dificuldade não está na complexidade do protocolo, mas no número de componentes envolvidos: DNSSEC, certificado TLS, registro TLSA, configuração MTA. Um único elo defeituoso é suficiente para quebrar toda a cadeia.
Este guia cobre os 5 erros DANE/TLSA mais frequentes com, para cada um, o sintoma, os comandos de diagnóstico e a correção. Ele é destinado a administradores de sistema e DevOps que já possuem uma configuração DANE em funcionamento. Se você ainda não implantou DANE, comece pelo primeiro artigo desta série (veja "Guias relacionados" no final da página).
A primeira coisa a verificar é o estado DNSSEC da sua zona. Sem DNSSEC válido, os registros TLSA são ignorados pelos servidores de envio. Use
digcom o flag+dnssecpara verificar se as assinaturas estão presentes e válidas:dig +dnssec MX captaindns.com dig +dnssec A mail.captaindns.comO flag
ad(Authenticated Data) na resposta confirma que o DNSSEC é válido. Se esse flag estiver ausente, o problema está no nível do DNSSEC, não do TLSA. Verifique também se a cadeia de confiança está completa comdelv:delv @8.8.8.8 mail.captaindns.com A +rtraceVerifique se o TLSA está publicado no local correto e contém os valores corretos. O nome DNS deve corresponder ao hostname MX, não ao domínio:
dig TLSA _25._tcp.mail.captaindns.com +shortA resposta deve conter os 4 campos: usage, selector, matching type e hash. Se a consulta não retornar nada, o TLSA está publicado no nome DNS errado ou não existe.
Obtenha o certificado apresentado pelo servidor e calcule seu hash para compará-lo ao TLSA publicado:
# Recuperar o certificado via STARTTLS openssl s_client -connect mail.captaindns.com:25 \ -starttls smtp -servername mail.captaindns.com \ 2>/dev/null | openssl x509 -outform DER \ | openssl dgst -sha256Para um TLSA com selector SPKI (1), calcule o hash da chave pública:
openssl s_client -connect mail.captaindns.com:25 \ -starttls smtp -servername mail.captaindns.com \ 2>/dev/null | openssl x509 -pubkey -noout \ | openssl pkey -pubin -outform DER \ | openssl dgst -sha256Compare o resultado com o hash no TLSA. Se os valores divergirem, o certificado foi renovado sem atualizar o TLSA.
Verifique se o servidor oferece corretamente STARTTLS na porta 25:
openssl s_client -connect mail.captaindns.com:25 \ -starttls smtp -verify 5 \ -servername mail.captaindns.comVerifique se o certificado retornado corresponde ao hostname MX e se a cadeia de certificados está completa. Um certificado expirado ou um hostname incorreto causa uma falha DANE mesmo se o hash TLSA estiver correto.
Os logs do Postfix contêm os detalhes das falhas DANE. Filtre as entradas relevantes:
grep "dane" /var/log/mail.log | grep -i "fail\|error\|unusable"Os relatórios TLS-RPT (se configurados) sinalizam as falhas vistas pelos servidores de envio. Procure os campos
failure-typecontendodane-requiredoutlsa-invalidnos relatórios JSON recebidos por email.
Os 5 erros DANE mais comuns
Os problemas DANE se dividem em 5 categorias. Cada seção abaixo descreve o sintoma observável, o comando de diagnóstico e a correção.

Erro 1: DNSSEC não assinado ou assinatura expirada
Sintoma: os servidores de envio reportam "DANE required but not available" ou "no DNSSEC" nos relatórios TLS-RPT. Os emails são entregues em modo oportunístico (sem verificação DANE) ou recusados.
Diagnóstico:
# Verificar o flag AD (Authenticated Data)
dig +dnssec MX captaindns.com | grep flags
# Resultado esperado: flags: qr rd ra ad
# Verificar a validade das assinaturas RRSIG
dig +dnssec SOA captaindns.com | grep RRSIG
# A data de expiração está no campo RRSIG
Causas frequentes:
- O registrar desativou o DNSSEC após uma transferência de domínio
- As chaves DNSSEC (KSK/ZSK) expiraram sem rotação automática
- O DS record no registrar não corresponde mais à DNSKEY ativa
Correção: verifique se o DS record no seu registrar corresponde à sua DNSKEY. Se você usa Bind9, verifique as datas de expiração das chaves com dnssec-settime e configure a rotação automática.
Erro 2: hash TLSA desatualizado após renovação do certificado
Sintoma: "TLSA validation failed" ou "certificate mismatch" nos logs. Esse erro ocorre tipicamente 60 a 90 dias após a implantação inicial, na primeira renovação Let's Encrypt.
Diagnóstico:
# Hash do certificado ativo (selector 0 : Full cert)
openssl s_client -connect mail.captaindns.com:25 \
-starttls smtp 2>/dev/null \
| openssl x509 -outform DER \
| openssl dgst -sha256
# Hash publicado no DNS
dig TLSA _25._tcp.mail.captaindns.com +short
# Comparar os 64 caracteres hexadecimais
Causas frequentes:
- O hook de renovação do Certbot não atualiza o TLSA
- O selector é Full (0) em vez de SPKI (1): cada renovação altera o hash
- O usage é DANE-EE (3) sem
--reuse-keyno Certbot
Correção:
- Solução rápida: gere o novo hash com nosso DANE TLSA Generator e atualize o DNS
- Solução durável: use SPKI selector (1) com
--reuse-keyno Certbot, ou mude para DANE-TA (2) com o certificado CA Let's Encrypt. Consulte nosso tutorial Postfix/Bind/Let's Encrypt (artigo 2 desta série) para a configuração do hook de renovação automática
Erro 3: TLSA publicado no nome DNS errado
Sintoma: "no TLSA records found" mesmo tendo criado o registro. Este é o erro mais comum entre iniciantes em DANE.
Diagnóstico:
# Encontrar o hostname MX
dig MX captaindns.com +short
# Resultado: 10 mail.captaindns.com.
# Verificar o TLSA no local correto (hostname MX)
dig TLSA _25._tcp.mail.captaindns.com +short
# Erro típico: TLSA publicado no domínio em vez do MX
dig TLSA _25._tcp.captaindns.com +short
# Esse TLSA é IGNORADO pelos servidores de envio
Causa: confusão entre o domínio (captaindns.com) e o hostname MX (mail.captaindns.com). O TLSA deve ser publicado em _25._tcp.<hostname-MX>, conforme a RFC 7672 seção 2.1.1.
Correção: publique o TLSA em _25._tcp.mail.captaindns.com (ou o hostname retornado pelo seu registro MX). Se o seu domínio tem vários MX, cada hostname deve ter seu próprio TLSA.
Erro 4: STARTTLS não disponível ou mal configurado
Sintoma: DANE está configurado no DNS, mas o servidor não oferece STARTTLS, ou o certificado apresentado não corresponde ao hostname. Os logs mostram "TLS handshake failed" ou "certificate hostname mismatch".
Diagnóstico:
# Testar se STARTTLS é oferecido
openssl s_client -connect mail.captaindns.com:25 \
-starttls smtp -verify 5
# Verificar o Common Name e os SAN do certificado
openssl s_client -connect mail.captaindns.com:25 \
-starttls smtp 2>/dev/null \
| openssl x509 -noout -subject -ext subjectAltName
Causas frequentes:
smtpd_tls_cert_fileaponta para um arquivo errado no Postfix- O certificado não contém o hostname MX nos seus Subject Alternative Names
- O firewall bloqueia STARTTLS ou a porta 25 não está acessível em TLS
Correção: no Postfix, verifique se smtpd_tls_security_level está no mínimo em may e se os caminhos dos certificados estão corretos:
# /etc/postfix/main.cf
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.captaindns.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.captaindns.com/privkey.pem
smtpd_tls_security_level = may

Erro 5: propagação DNS incompleta
Sintoma: DANE funciona de forma intermitente. Alguns servidores de envio validam o TLSA, outros reportam um erro. O problema aparece frequentemente após uma atualização DNS recente.
Diagnóstico:
# Comparar as respostas entre servidores NS
dig TLSA _25._tcp.mail.captaindns.com @ns1.captaindns.com +short
dig TLSA _25._tcp.mail.captaindns.com @ns2.captaindns.com +short
# Verificar o TTL restante
dig TLSA _25._tcp.mail.captaindns.com +noall +answer
Causas frequentes:
- Transferência de zona incompleta entre servidores DNS primário e secundário
- TTL elevado no registro antigo (os caches DNS mantêm o valor anterior)
- Um servidor NS não responde ou retorna uma versão desatualizada da zona
Correção: verifique se todos os seus servidores NS retornam o mesmo valor TLSA. Se você acabou de atualizar o TLSA, aguarde a expiração do TTL anterior antes de remover o registro antigo. Para rotações de certificado, publique o novo TLSA 2x TTL antes da rotação efetiva.
Monitorar DANE em produção
Corrigir um erro pontual não é suficiente. Os 3 mecanismos de monitoramento a seguir previnem incidentes recorrentes.
TLS-RPT: ative os relatórios TLS-RPT (RFC 8460) para receber os avisos de falha DANE da parte dos servidores de envio. O campo failure-type no relatório JSON indica precisamente o tipo de erro:
| failure-type TLS-RPT | Significado | Ação |
|---|---|---|
dane-required | TLSA exigido mas ausente | Verificar publicação TLSA |
tlsa-invalid | TLSA presente mas inválido | Verificar hash e sintaxe |
dnssec-invalid | Assinatura DNSSEC inválida | Verificar chaves DNSSEC |
certificate-expired | Certificado TLS expirado | Renovar o certificado |
starttls-not-supported | Sem STARTTLS | Verificar config Postfix |
Monitoramento de certificado: configure um alerta 14 dias antes da expiração do certificado TLS. A renovação Let's Encrypt é feita automaticamente, mas o hook TLSA pode falhar silenciosamente.
Verificação automática: agende uma verificação diária com nosso DANE TLSA Syntax Checker ou um script cron que compara o hash publicado ao certificado ativo:
#!/bin/bash
# Verificação diária DANE
TLSA_HASH=$(dig TLSA _25._tcp.mail.captaindns.com +short | awk '{print $4}')
CERT_HASH=$(openssl s_client -connect mail.captaindns.com:25 \
-starttls smtp 2>/dev/null \
| openssl x509 -pubkey -noout \
| openssl pkey -pubin -outform DER \
| openssl dgst -sha256 | awk '{print $2}')
if [ "$TLSA_HASH" != "$CERT_HASH" ]; then
echo "ALERTA: hash TLSA diverge do certificado ativo" | \
mail -s "DANE TLSA mismatch" admin@captaindns.com
fi
Plano de ação recomendado
- Diagnosticar: use a metodologia em 5 passos acima ou nosso DANE TLSA Checker para identificar o problema
- Identificar: classifique o erro em uma das 5 categorias (DNSSEC, hash, nome DNS, STARTTLS, propagação)
- Corrigir: aplique a solução correspondente com os comandos fornecidos
- Verificar: teste a correção com
dig +dnsseceopenssl s_clientantes de considerar o problema resolvido - Prevenir: implemente TLS-RPT, o monitoramento de certificado e a verificação automática
FAQ
Por que a validação DANE falha após a renovação do certificado?
A renovação gera um novo par de chaves (exceto se --reuse-key estiver ativado no Certbot). O hash no registro TLSA não corresponde mais ao novo certificado. Duas soluções: usar SPKI selector (1) com --reuse-key para manter a mesma chave pública entre as renovações, ou mudar para DANE-TA (2) com o certificado da autoridade de certificação Let's Encrypt que não muda a cada renovação.
Como corrigir o erro 'no TLSA records found'?
Esse erro significa que o TLSA está ausente do DNS ou publicado no local errado. O TLSA deve ser publicado em _25._tcp.<hostname-MX>, não em _25._tcp.<domínio>. Verifique com dig MX captaindns.com qual é o hostname MX e publique o TLSA no nome correto. Se o TLSA existe, verifique se o DNSSEC está ativo, pois os resolvedores ignoram os TLSA sem DNSSEC.
DANE funciona se o DNSSEC está assinado no domínio mas não no hostname MX?
O DNSSEC deve estar assinado na zona que contém o TLSA. Se o seu hostname MX é mail.captaindns.com e o TLSA está nessa mesma zona, então essa zona deve ter DNSSEC ativo. A zona do domínio de envio não precisa de DNSSEC. Por outro lado, se o MX aponta para um hostname em outra zona (hospedagem compartilhada), é essa zona que deve ter DNSSEC.
Como depurar DANE com os logs do Postfix?
Ative o nível de log TLS no Postfix com smtp_tls_loglevel = 2 (saída) ou smtpd_tls_loglevel = 2 (entrada) em main.cf. As linhas contendo Verified TLS connection confirmam um sucesso. As linhas com dane e unusable ou failed indicam uma falha. Procure também DANE TLSA nos logs para ver os detalhes da verificação.
O que significa 'DANE required but TLSA absent' em um relatório TLS-RPT?
Essa mensagem indica que o servidor de envio detectou uma política DANE (via DNSSEC na zona MX) mas não encontrou um registro TLSA. Ou o TLSA ainda não foi publicado, ou está no nome DNS errado, ou o resolvedor do servidor de envio ainda não propagou a atualização. Verifique a publicação com dig TLSA _25._tcp.mail.captaindns.com a partir de um resolvedor externo.
O hash TLSA está correto mas a validação falha, por quê?
Várias causas possíveis: o selector no TLSA (Full vs SPKI) não corresponde ao método de hash utilizado, o certificado intermediário está faltando na cadeia apresentada pelo servidor, ou o matching type (SHA-256 vs SHA-512) não corresponde ao hash publicado. Verifique os 3 primeiros campos do TLSA (usage, selector, matching type) e recalcule o hash com os parâmetros corretos.
Como testar DANE sem arriscar a perda de emails?
Publique primeiro o TLSA com um TTL baixo (300 segundos) e verifique-o com dig e nosso DANE TLSA Checker. Teste o envio a partir de um servidor DANE-aware (Gmail, Microsoft 365) para o seu domínio. Se a validação falhar, corrija o TLSA. Os servidores de envio em conformidade com a RFC 7672 seção 2.2 voltam ao modo oportunístico se o TLSA for inválido, exceto se sua política impõe DANE estrito. Aumente o TTL assim que a configuração for validada.
📚 Guias de DANE/TLSA relacionados
- DANE/TLSA: o guia completo para autenticar certificados de email via DNS: funcionamento, anatomia TLSA, usos recomendados e comparação com MTA-STS
- Configurar DANE/TLSA com Postfix, Bind e Let's Encrypt: tutorial passo a passo com comandos copiáveis, automação de renovação e verificação
- Implementar DANE para Exchange Online e Microsoft 365
Fontes
- RFC 7672 - SMTP Security via Opportunistic DANE TLS
- RFC 7671 - The DNS-Based Authentication of Named Entities (DANE) Protocol: Updates and Operational Guidance
- RFC 6698 - The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA
- Postfix TLS README - DANE
- ISC BIND 9 DNSSEC Guide


