Troubleshooting DANE/TLSA: diagnosticare e correggere gli errori comuni
Di CaptainDNS
Pubblicato il 23 febbraio 2026

- 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[]: TLSnei 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).
La prima cosa da controllare è lo stato DNSSEC della tua zona. Senza DNSSEC valido, i record TLSA vengono ignorati dai server mittenti. Usa
digcon il flag+dnssecper verificare che le firme siano presenti e valide:dig +dnssec MX captaindns.com dig +dnssec A mail.captaindns.comIl 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 condelv:delv @8.8.8.8 mail.captaindns.com A +rtraceVerifica 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 +shortLa 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.
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 -sha256Per 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 -sha256Confronta il risultato con l'hash nel TLSA. Se i valori divergono, il certificato è stato rinnovato senza aggiornare il TLSA.
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.comControlla 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.
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-typecontenentidane-requiredotlsa-invalidnei 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.

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-keyin 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-keyin 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_filepunta 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

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-RPT | Significato | Azione |
|---|---|---|
dane-required | TLSA richiesto ma assente | Verificare pubblicazione TLSA |
tlsa-invalid | TLSA presente ma invalido | Verificare hash e sintassi |
dnssec-invalid | Firma DNSSEC invalida | Verificare chiavi DNSSEC |
certificate-expired | Certificato TLS scaduto | Rinnovare il certificato |
starttls-not-supported | Nessun STARTTLS | Verificare 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
- Diagnosticare: usa la metodologia in 5 passaggi qui sopra o il nostro DANE TLSA Checker per identificare il problema
- Identificare: classifica l'errore in una delle 5 categorie (DNSSEC, hash, nome DNS, STARTTLS, propagazione)
- Correggere: applica la soluzione corrispondente con i comandi forniti
- Verificare: testa la correzione con
dig +dnsseceopenssl s_clientprima di considerare il problema risolto - 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.<hostname-MX>, non su _25._tcp.<dominio>. 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
- DANE/TLSA: la guida completa per autenticare i certificati email via DNS: funzionamento, anatomia TLSA, usi consigliati e confronto con MTA-STS
- Configurare DANE/TLSA con Postfix, Bind e Let's Encrypt: tutorial passo passo con comandi copiabili, automazione del rinnovo e verifica
- Implementare DANE per Exchange Online e Microsoft 365
Fonti
- 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


