Vai al contenuto principale

Troubleshooting DANE/TLSA: diagnosticare e correggere gli errori comuni

Di CaptainDNS
Pubblicato il 23 febbraio 2026

Troubleshooting DANE/TLSA: diagnosticare e correggere gli errori comuni con dig, openssl e Postfix
TL;DR
  • I 5 errori DANE più comuni: DNSSEC assente, hash TLSA obsoleto, nome DNS errato, STARTTLS mal configurato, propagazione incompleta
  • Comandi essenziali: dig +dnssec, openssl s_client -starttls smtp, postfix/smtpd[]: TLS nei log
  • Il rinnovo del certificato Let's Encrypt è la causa n°1 dei fallimenti DANE in produzione
  • Il nostro DANE TLSA Checker identifica automaticamente questi problemi
  • I report TLS-RPT (RFC 8460) segnalano i fallimenti DANE prima che i tuoi corrispondenti ti avvisino

Hai distribuito DANE/TLSA sul tuo server email seguendo le best practice, tutto funzionava, poi un giorno le email iniziano a essere rifiutate da certi destinatari. Il messaggio d'errore menziona "failed DANE validation" o "TLSA record not found", ma i log non ti dicono esattamente cosa è cambiato.

Questo scenario è il quotidiano degli amministratori DANE. La difficoltà non sta nella complessità del protocollo, ma nel numero di componenti coinvolti: DNSSEC, certificato TLS, record TLSA, configurazione MTA. Un solo anello debole basta per rompere tutta la catena.

Questa guida copre i 5 errori DANE/TLSA più frequenti con, per ciascuno, il sintomo, i comandi di diagnosi e la correzione. Si rivolge agli amministratori di sistema e DevOps che hanno già una configurazione DANE attiva. Se non hai ancora distribuito DANE, inizia dal primo articolo di questa serie (vedi "Guide correlate" in fondo alla pagina).

Metodologia in 5 passaggi per identificare la causa di un fallimento di validazione DANE
  1. La prima cosa da controllare è lo stato DNSSEC della tua zona. Senza DNSSEC valido, i record TLSA vengono ignorati dai server mittenti. Usa dig con il flag +dnssec per verificare che le firme siano presenti e valide:

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

    Il flag ad (Authenticated Data) nella risposta conferma che DNSSEC è valido. Se questo flag è assente, il problema è a livello DNSSEC, non a livello TLSA. Verifica anche che la catena di fiducia sia completa con delv:

    delv @8.8.8.8 mail.captaindns.com A +rtrace
    
  2. Verifica che il TLSA sia pubblicato nel posto giusto e contenga i valori corretti. Il nome DNS deve corrispondere all'hostname MX, non al dominio:

    dig TLSA _25._tcp.mail.captaindns.com +short
    

    La risposta deve contenere i 4 campi: usage, selector, matching type e hash. Se la query non restituisce nulla, il TLSA è pubblicato con il nome DNS sbagliato o non esiste.

  3. Recupera il certificato presentato dal server e calcolane l'hash per confrontarlo con il TLSA pubblicato:

    # Recuperare il certificato tramite 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
    

    Per un TLSA con selector SPKI (1), calcola l'hash della chiave pubblica:

    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
    

    Confronta il risultato con l'hash nel TLSA. Se i valori divergono, il certificato è stato rinnovato senza aggiornare il TLSA.

  4. Verifica che il server proponga correttamente STARTTLS sulla porta 25:

    openssl s_client -connect mail.captaindns.com:25 \
      -starttls smtp -verify 5 \
      -servername mail.captaindns.com
    

    Controlla che il certificato restituito corrisponda all'hostname MX e che la catena di certificati sia completa. Un certificato scaduto o un hostname errato provoca un fallimento DANE anche se l'hash TLSA è corretto.

  5. I log di Postfix contengono i dettagli dei fallimenti DANE. Filtra le voci pertinenti:

    grep "dane" /var/log/mail.log | grep -i "fail\|error\|unusable"
    

    I report TLS-RPT (se configurati) segnalano i fallimenti visti dai server mittenti. Cerca i campi failure-type contenenti dane-required o tlsa-invalid nei report JSON ricevuti via email.

I 5 errori DANE più comuni

I problemi DANE si suddividono in 5 categorie. Ogni sezione qui sotto descrive il sintomo osservabile, il comando di diagnosi e la correzione.

Albero decisionale per diagnosticare gli errori DANE/TLSA

Errore 1: DNSSEC non firmato o firma scaduta

Sintomo: i server mittenti segnalano "DANE required but not available" o "no DNSSEC" nei report TLS-RPT. Le email vengono consegnate in modalità opportunistica (senza verifica DANE) o rifiutate.

Diagnosi:

# Verificare il flag AD (Authenticated Data)
dig +dnssec MX captaindns.com | grep flags
# Risultato atteso: flags: qr rd ra ad

# Verificare la validità delle firme RRSIG
dig +dnssec SOA captaindns.com | grep RRSIG
# La data di scadenza è nel campo RRSIG

Cause frequenti:

  • Il registrar ha disattivato DNSSEC dopo un trasferimento di dominio
  • Le chiavi DNSSEC (KSK/ZSK) sono scadute senza rotazione automatica
  • Il DS record presso il registrar non corrisponde più alla DNSKEY attiva

Correzione: verifica che il DS record presso il tuo registrar corrisponda alla tua DNSKEY. Se usi Bind9, controlla le date di scadenza delle chiavi con dnssec-settime e configura la rotazione automatica.

Errore 2: hash TLSA obsoleto dopo il rinnovo del certificato

Sintomo: "TLSA validation failed" o "certificate mismatch" nei log. Questo errore si verifica tipicamente 60-90 giorni dopo il deployment iniziale, al primo rinnovo Let's Encrypt.

Diagnosi:

# Hash del certificato attivo (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 pubblicato nel DNS
dig TLSA _25._tcp.mail.captaindns.com +short
# Confrontare i 64 caratteri esadecimali

Cause frequenti:

  • L'hook di rinnovo Certbot non aggiorna il TLSA
  • Il selector è Full (0) invece di SPKI (1): ogni rinnovo cambia l'hash
  • L'usage è DANE-EE (3) senza --reuse-key in Certbot

Correzione:

  • Soluzione rapida: genera il nuovo hash con il nostro DANE TLSA Generator e aggiorna il DNS
  • Soluzione duratura: usa SPKI selector (1) con --reuse-key in Certbot, o passa a DANE-TA (2) con il certificato CA Let's Encrypt. Consulta il nostro tutorial Postfix/Bind/Let's Encrypt (articolo 2 di questa serie) per la configurazione dell'hook di rinnovo automatico

Errore 3: TLSA pubblicato con il nome DNS sbagliato

Sintomo: "no TLSA records found" anche se hai creato il record. È l'errore più comune tra i principianti DANE.

Diagnosi:

# Trovare l'hostname MX
dig MX captaindns.com +short
# Risultato: 10 mail.captaindns.com.

# Verificare il TLSA nel posto giusto (hostname MX)
dig TLSA _25._tcp.mail.captaindns.com +short

# Errore tipico: TLSA pubblicato sul dominio invece che sul MX
dig TLSA _25._tcp.captaindns.com +short
# Questo TLSA viene IGNORATO dai server mittenti

Causa: confusione tra il dominio (captaindns.com) e l'hostname MX (mail.captaindns.com). Il TLSA deve essere pubblicato su _25._tcp.<hostname-MX>, conformemente alla RFC 7672 sezione 2.1.1.

Correzione: pubblica il TLSA su _25._tcp.mail.captaindns.com (o l'hostname restituito dal tuo record MX). Se il tuo dominio ha più MX, ogni hostname deve avere il proprio TLSA.

Errore 4: STARTTLS non disponibile o mal configurato

Sintomo: DANE è configurato lato DNS ma il server non propone STARTTLS, o il certificato presentato non corrisponde all'hostname. I log mostrano "TLS handshake failed" o "certificate hostname mismatch".

Diagnosi:

# Testare se STARTTLS è offerto
openssl s_client -connect mail.captaindns.com:25 \
  -starttls smtp -verify 5

# Verificare il Common Name e i SAN del certificato
openssl s_client -connect mail.captaindns.com:25 \
  -starttls smtp 2>/dev/null \
  | openssl x509 -noout -subject -ext subjectAltName

Cause frequenti:

  • smtpd_tls_cert_file punta a un file sbagliato in Postfix
  • Il certificato non contiene l'hostname MX nei Subject Alternative Names
  • Il firewall blocca STARTTLS o la porta 25 non è accessibile in TLS

Correzione: in Postfix, verifica che smtpd_tls_security_level sia almeno may e che i percorsi dei certificati siano corretti:

# /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

Matrice degli errori DANE/TLSA: sintomo, causa e soluzione

Errore 5: propagazione DNS incompleta

Sintomo: DANE funziona in modo intermittente. Alcuni server mittenti validano il TLSA, altri segnalano un errore. Il problema compare spesso dopo un aggiornamento DNS recente.

Diagnosi:

# Confrontare le risposte tra server NS
dig TLSA _25._tcp.mail.captaindns.com @ns1.captaindns.com +short
dig TLSA _25._tcp.mail.captaindns.com @ns2.captaindns.com +short

# Verificare il TTL restante
dig TLSA _25._tcp.mail.captaindns.com +noall +answer

Cause frequenti:

  • Trasferimento di zona incompleto tra server DNS primario e secondario
  • TTL elevato sul vecchio record (le cache DNS mantengono il valore precedente)
  • Un server NS non risponde o restituisce una versione obsoleta della zona

Correzione: verifica che tutti i tuoi server NS restituiscano lo stesso valore TLSA. Se hai appena aggiornato il TLSA, attendi la scadenza del TTL precedente prima di eliminare il vecchio record. Per le rotazioni di certificato, pubblica il nuovo TLSA 2x TTL prima della rotazione effettiva.

Monitorare DANE in produzione

Correggere un errore puntuale non basta. I 3 meccanismi di sorveglianza seguenti prevengono gli incidenti ricorrenti.

TLS-RPT: attiva i report TLS-RPT (RFC 8460) per ricevere le segnalazioni di fallimento DANE da parte dei server mittenti. Il campo failure-type nel report JSON indica con precisione il tipo di errore:

failure-type TLS-RPTSignificatoAzione
dane-requiredTLSA richiesto ma assenteVerificare pubblicazione TLSA
tlsa-invalidTLSA presente ma invalidoVerificare hash e sintassi
dnssec-invalidFirma DNSSEC invalidaVerificare chiavi DNSSEC
certificate-expiredCertificato TLS scadutoRinnovare il certificato
starttls-not-supportedNessun STARTTLSVerificare config Postfix

Monitoraggio certificato: configura un avviso 14 giorni prima della scadenza del certificato TLS. Il rinnovo Let's Encrypt avviene automaticamente, ma l'hook TLSA può fallire silenziosamente.

Verifica automatica: pianifica una verifica quotidiana con il nostro DANE TLSA Syntax Checker o uno script cron che confronta l'hash pubblicato con il certificato attivo:

#!/bin/bash
# Verifica quotidiana 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 "AVVISO: l'hash TLSA diverge dal certificato attivo" | \
    mail -s "DANE TLSA mismatch" admin@captaindns.com
fi

Piano d'azione consigliato

  1. Diagnosticare: usa la metodologia in 5 passaggi qui sopra o il nostro DANE TLSA Checker per identificare il problema
  2. Identificare: classifica l'errore in una delle 5 categorie (DNSSEC, hash, nome DNS, STARTTLS, propagazione)
  3. Correggere: applica la soluzione corrispondente con i comandi forniti
  4. Verificare: testa la correzione con dig +dnssec e openssl s_client prima di considerare il problema risolto
  5. Prevenire: implementa TLS-RPT, il monitoraggio certificato e la verifica automatica

FAQ

Perché la validazione DANE fallisce dopo il rinnovo del certificato?

Il rinnovo genera una nuova coppia di chiavi (a meno che --reuse-key sia attivo in Certbot). L'hash nel record TLSA non corrisponde più al nuovo certificato. Due soluzioni: usare SPKI selector (1) con --reuse-key per conservare la stessa chiave pubblica tra i rinnovi, o passare a DANE-TA (2) con il certificato dell'autorità di certificazione Let's Encrypt che non cambia a ogni rinnovo.

Come correggere l'errore 'no TLSA records found'?

Questo errore significa che il TLSA è assente dal DNS o pubblicato nel posto sbagliato. Il TLSA deve essere pubblicato su _25._tcp.&lt;hostname-MX&gt;, non su _25._tcp.&lt;dominio&gt;. Verifica con dig MX captaindns.com qual è l'hostname MX, poi pubblica il TLSA sul nome corretto. Se il TLSA esiste, verifica che DNSSEC sia attivo perché i resolver ignorano i TLSA senza DNSSEC.

DANE funziona se DNSSEC è firmato sul dominio ma non sull'hostname MX?

DNSSEC deve essere firmato sulla zona che contiene il TLSA. Se il tuo hostname MX è mail.captaindns.com e il TLSA è nella stessa zona, allora questa zona deve avere DNSSEC attivo. La zona del dominio mittente non ha bisogno di DNSSEC. Invece, se l'MX punta a un hostname in un'altra zona (hosting condiviso), è quella zona che deve avere DNSSEC.

Come fare il debug di DANE con i log di Postfix?

Attiva il livello di log TLS in Postfix con smtp_tls_loglevel = 2 (in uscita) o smtpd_tls_loglevel = 2 (in entrata) in main.cf. Le righe contenenti Verified TLS connection confermano un successo. Le righe con dane e unusable o failed indicano un fallimento. Cerca anche DANE TLSA nei log per vedere i dettagli della verifica.

Cosa significa 'DANE required but TLSA absent' in un report TLS-RPT?

Questo messaggio indica che il server mittente ha rilevato una policy DANE (tramite DNSSEC sulla zona MX) ma non ha trovato un record TLSA. O il TLSA non è ancora pubblicato, o è sul nome DNS sbagliato, o il resolver del server mittente non ha ancora propagato l'aggiornamento. Verifica la pubblicazione con dig TLSA _25._tcp.mail.captaindns.com da un resolver esterno.

L'hash TLSA è corretto ma la validazione fallisce, perché?

Diverse cause possibili: il selector nel TLSA (Full vs SPKI) non corrisponde al metodo di hash utilizzato, il certificato intermedio manca nella catena presentata dal server, o il matching type (SHA-256 vs SHA-512) non corrisponde all'hash pubblicato. Verifica i primi 3 campi del TLSA (usage, selector, matching type) e ricalcola l'hash con i parametri corretti.

Come testare DANE senza rischiare la perdita di email?

Pubblica prima il TLSA con un TTL basso (300 secondi) e verificalo con dig e il nostro DANE TLSA Checker. Testa l'invio da un server DANE-aware (Gmail, Microsoft 365) verso il tuo dominio. Se la validazione fallisce, correggi il TLSA. I server mittenti conformi alla RFC 7672 sezione 2.2 ricadono in modalità opportunistica se il TLSA è invalido, a meno che la loro policy imponga DANE strict. Aumenta il TTL una volta validata la configurazione.

📚 Guide DANE/TLSA correlate

Fonti

Articoli simili