Ir para o conteúdo principal

Solução de problemas DANE/TLSA: diagnosticar e corrigir os erros mais comuns

Por CaptainDNS
Publicado em 23 de fevereiro de 2026

Solução de problemas DANE/TLSA: diagnosticar e corrigir os erros mais comuns com dig, openssl e Postfix
TL;DR
  • 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[]: TLS nos 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).

Diagnosticar uma falha DANE/TLSA

Metodologia em 5 passos para identificar a causa de uma falha de validação DANE
  1. Passo 1: verificar a resolução DNSSEC do domínio

    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 dig com o flag +dnssec para verificar se as assinaturas estão presentes e válidas:

    dig +dnssec MX captaindns.com
    dig +dnssec A mail.captaindns.com
    

    O 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 com delv:

    delv @8.8.8.8 mail.captaindns.com A +rtrace
    
  2. Passo 2: verificar o registro TLSA publicado

    Verifique 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 +short
    

    A 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.

  3. Passo 3: comparar o hash TLSA ao certificado ativo

    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 -sha256
    

    Para 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 -sha256
    

    Compare o resultado com o hash no TLSA. Se os valores divergirem, o certificado foi renovado sem atualizar o TLSA.

  4. Passo 4: testar a conexão STARTTLS

    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.com
    

    Verifique 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.

  5. Passo 5: analisar os logs MTA e os relatórios TLS-RPT

    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-type contendo dane-required ou tlsa-invalid nos 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.

Árvore de decisão para diagnosticar erros DANE/TLSA

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-key no 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-key no 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_file aponta 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

Matriz de erros DANE/TLSA: sintoma, causa e solução

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-RPTSignificadoAção
dane-requiredTLSA exigido mas ausenteVerificar publicação TLSA
tlsa-invalidTLSA presente mas inválidoVerificar hash e sintaxe
dnssec-invalidAssinatura DNSSEC inválidaVerificar chaves DNSSEC
certificate-expiredCertificado TLS expiradoRenovar o certificado
starttls-not-supportedSem STARTTLSVerificar 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

  1. Diagnosticar: use a metodologia em 5 passos acima ou nosso DANE TLSA Checker para identificar o problema
  2. Identificar: classifique o erro em uma das 5 categorias (DNSSEC, hash, nome DNS, STARTTLS, propagação)
  3. Corrigir: aplique a solução correspondente com os comandos fornecidos
  4. Verificar: teste a correção com dig +dnssec e openssl s_client antes de considerar o problema resolvido
  5. 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.&lt;hostname-MX&gt;, não em _25._tcp.&lt;domínio&gt;. 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

Fontes

Artigos relacionados