Ir para o conteudo 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).

Metodologia em 5 passos para identificar a causa de uma falha de validação DANE
  1. 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. 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. 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. 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. 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