Vai al contenuto principale

DKIM fail: tutte le cause e come correggerle

Di CaptainDNS
Pubblicato il 19 febbraio 2026

Albero di diagnosi delle cause di un errore DKIM con le soluzioni associate
TL;DR
  • Un risultato dkim=fail significa che la firma DKIM dell'email non è stata verificata dal server di ricezione
  • Le 3 cause più frequenti: body hash alterato (contenuto modificato), chiave pubblica non trovata nel DNS, firma scaduta (termine x= superato)
  • L'inoltro email rompe quasi sempre la firma DKIM, è un comportamento atteso che solo ARC può compensare
  • Usa il comando dig TXT selettore._domainkey.captaindns.com per verificare che la tua chiave pubblica sia correttamente pubblicata
  • Abbina sempre DKIM a DMARC e SPF per un'autenticazione completa

Apri gli header di un'email e trovi dkim=fail. Il messaggio è stato inviato correttamente, la tua configurazione sembrava corretta, eppure la verifica DKIM fallisce. Questo scenario è frequente e le cause sono molteplici.

Questa guida analizza ogni causa di un errore DKIM, spiega come diagnosticarla e fornisce la soluzione precisa da applicare. Che il problema venga dal DNS, dalla firma, dall'inoltro o dall'allineamento DMARC, saprai esattamente cosa correggere.

Come leggere un risultato DKIM negli header email?

Ogni email ricevuta contiene un header Authentication-Results aggiunto dal server di ricezione. È lì che trovi il verdetto DKIM.

I verdetti possibili

VerdettoSignificato
dkim=passFirma verificata con successo
dkim=failLa firma esiste ma la verifica è fallita
dkim=noneNessuna firma DKIM trovata nel messaggio
dkim=neutralFirma presente ma il verificatore non ha potuto trarre conclusioni
dkim=temperrorErrore temporaneo (timeout DNS, server non disponibile)
dkim=permerrorErrore permanente (sintassi DNS non valida, chiave malformata)

Esempio di header con errore

Authentication-Results: mx.google.com;
  dkim=fail (body hash did not verify) header.d=captaindns.com header.s=google header.b=abc12345;
  spf=pass smtp.mailfrom=captaindns.com;
  dmarc=fail

Il testo tra parentesi (body hash did not verify) indica il motivo preciso dell'errore. È il tuo punto di partenza per la diagnosi.

Le 7 cause di un errore DKIM

Albero di diagnosi degli errori DKIM con le 7 cause principali

Causa 1: body hash non verificato

Messaggio: body hash did not verify

È l'errore più comune. Il server di invio calcola un hash del contenuto dell'email e lo include nella firma (tag bh=). Il server di ricezione ricalcola questo hash. Se i due non corrispondono, la verifica fallisce.

Cause frequenti:

  • Un relay intermedio ha modificato il contenuto (aggiunta di footer, riscrittura URL, antivirus)
  • Il server di mailing aggiunge un pixel di tracking dopo la firma
  • Un proxy email o un DLP (Data Loss Prevention) altera il corpo del messaggio

Diagnosi:

# Verificare che il record DKIM sia correttamente pubblicato
dig TXT google._domainkey.captaindns.com +short

Soluzione: identifica il servizio che modifica il contenuto dopo la firma. Configuralo per agire prima della firma DKIM, oppure escludi le modifiche dal corpo firmato.

Causa 2: chiave pubblica non trovata

Messaggio: key not found o no key for signature

Il server di ricezione non trova il record DNS selettore._domainkey.dominio. Senza chiave pubblica, è impossibile verificare la firma.

Cause frequenti:

  • Il selettore dichiarato nella firma (s=) non corrisponde a nessun record DNS
  • Il record è stato eliminato per errore
  • Il CNAME verso il provider (Google, Microsoft) non è configurato
  • La propagazione DNS non è terminata

Diagnosi:

# Sostituisci "selettore" con il valore del campo s= della firma
dig TXT selettore._domainkey.captaindns.com +short

Se il comando non restituisce nulla, il record è assente.

Soluzione: pubblica (o ripubblica) il record DNS TXT o CNAME corrispondente al selettore. Attendi la propagazione DNS (fino a 48h a seconda del TTL).

Causa 3: firma scaduta

Messaggio: signature expired

Il tag x= della firma DKIM fissa un timestamp di scadenza. Se il server di ricezione verifica la firma dopo questa data, la verifica fallisce.

Cause frequenti:

  • L'email è rimasta in coda troppo a lungo (greylisting, server di ricezione lento)
  • Il valore x= è troppo breve (es: 1 ora invece di 7 giorni)
  • Sfasamento di orologio tra i server

Soluzione: aumenta la durata di validità della firma. La maggior parte dei provider usa 7 giorni. Se controlli il server di invio, verifica che x= lasci un margine sufficiente (minimo 72 ore consigliato).

Causa 4: errore di canonicalizzazione

Messaggio: bad signature o signature verification failed

La canonicalizzazione definisce come il server normalizza il messaggio prima di verificare la firma. Esistono due modalità: simple e relaxed. Se l'header DKIM dichiara c=simple/simple ma un relay modifica spazi o maiuscole/minuscole degli header, la verifica fallisce.

Diagnosi: nella firma DKIM, cerca il tag c=. Se il valore è simple/simple, è probabilmente la causa.

Soluzione: passa a c=relaxed/relaxed. Questa modalità tollera le modifiche minori (spazi, maiuscole/minuscole) che i relay email effettuano comunemente.

Causa 5: chiave troppo corta

Messaggio: key too short o insecure key

Dal 2024, Google e Yahoo rifiutano le chiavi RSA da 512 e 768 bit. La dimensione minima accettata è 1024 bit, e 2048 bit è raccomandata.

Diagnosi:

# Recuperare la chiave e verificarne la dimensione
dig TXT google._domainkey.captaindns.com +short
# Copiare il valore p= e decodificare in Base64 per contare i bit

Soluzione: genera una nuova coppia di chiavi RSA 2048 bit (o Ed25519) e pubblica la nuova chiave pubblica nel DNS. Aggiorna la configurazione del tuo server di invio con la nuova chiave privata.

Causa 6: inoltro email (forwarding)

L'inoltro email è la causa più difficile da risolvere. Quando un server intermedio ritrasmette un messaggio, può modificarne il contenuto (aggiunta di header, riscrittura dell'indirizzo di ritorno). La firma DKIM originale risulta quindi non valida.

Casi tipici:

  • Inoltro automatico Gmail/Outlook verso un'altra casella di posta
  • Mailing list che aggiungono un footer
  • Alias email che inoltrano verso un altro dominio

Soluzione: non esiste una soluzione universale. Il protocollo ARC (Authenticated Received Chain, RFC 8617) è stato progettato per questo caso: ogni server intermedio aggiunge la propria firma ARC, formando una catena di fiducia. Gmail e Microsoft supportano ARC. Lato mittente, non puoi impedire la rottura della firma durante l'inoltro.

Causa 7: difetto di allineamento DMARC

Messaggio: dmarc=fail (mentre dkim=pass)

Questo caso è particolare. La firma DKIM è tecnicamente valida (dkim=pass), ma DMARC fallisce perché il dominio d= della firma non corrisponde al dominio del From:. È un problema di allineamento, non di firma.

Schema dell'allineamento DKIM nel contesto DMARC

Esempio:

  • From: contact@captaindns.com
  • Firma DKIM: d=sendgrid.net (il provider firma con il proprio dominio)

DKIM passa, ma l'allineamento fallisce perché sendgrid.netcaptaindns.com.

Soluzione: configura il tuo provider di invio per firmare con il tuo dominio (d=captaindns.com). Nella maggior parte dei provider (SendGrid, Mailchimp, Brevo), questo avviene creando un CNAME selettore._domainkey.captaindns.com che punta alla loro infrastruttura.

Diagnosi rapida: tabella riepilogativa

SintomoCausa probabileVerificaSoluzione
body hash did not verifyContenuto modificato dopo la firmaIdentificare il relay che modificaFirmare dopo le modifiche
key not foundRecord DNS assentedig TXT s._domainkey.dominioPubblicare il record
signature expiredTermine x= superatoConfrontare x= con l'ora di verificaAumentare la durata
bad signatureCanonicalizzazione troppo restrittivaVerificare c= nella firmaPassare a relaxed/relaxed
key too shortChiave RSA <1024 bitDecodificare la chiave pubblicaRigenerare a 2048 bit
dkim=pass + dmarc=failAllineamento dominioConfrontare d= e From:Firmare con il tuo dominio

Differenza tra dkim=fail, dkim=none e dkim=temperror

Questi tre verdetti segnalano situazioni molto diverse.

dkim=fail: una firma DKIM esiste nel messaggio, ma la sua verifica è fallita. È un problema attivo da correggere.

dkim=none: nessuna firma DKIM è presente nel messaggio. Il server di invio non firma le email. Configura DKIM sul tuo server o sul tuo provider.

dkim=temperror: il server di ricezione non ha potuto verificare la firma a causa di un errore temporaneo (timeout DNS, server sovraccarico). La verifica verrà ritentata. Se il problema persiste, verifica che i tuoi server DNS rispondano rapidamente (TTL basso, nessun SERVFAIL).

Piano d'azione consigliato

  1. Identifica il verdetto esatto: apri gli header email e rileva il testo tra parentesi dopo dkim=fail
  2. Verifica il tuo record DNS: avvia un'analisi con il verificatore DKIM per confermare che la chiave pubblica sia correttamente pubblicata e sintatticamente valida
  3. Identifica i tuoi selettori attivi: usa il DKIM Selector Finder per scansionare i selettori conosciuti sul tuo dominio
  4. Correggi la causa identificata: applica la soluzione corrispondente al tuo caso (vedi tabella sopra)
  5. Monitora i risultati: dopo la correzione, invia email di test e verifica che dkim=pass appaia negli header

FAQ

Cosa significa dkim=fail negli header email?

Il verdetto dkim=fail indica che il messaggio contiene una firma DKIM, ma il server di ricezione non è riuscito a verificarla. Il testo tra parentesi (es: body hash did not verify) precisa il motivo dell'errore. Questo non significa necessariamente che l'email sia fraudolenta: una modifica legittima del contenuto in transito può causare questo errore.

Perché il mio DKIM fallisce anche se il record DNS è corretto?

Se il tuo record DNS è valido ma DKIM fallisce, il problema viene probabilmente dal contenuto del messaggio. Un relay intermedio (antivirus, DLP, proxy) potrebbe aver modificato il corpo dopo la firma. Verifica anche che il selettore nella firma (s=) corrisponda a quello pubblicato nel DNS.

Qual è la causa del messaggio 'body hash did not verify'?

Questo messaggio significa che l'hash del contenuto calcolato dal server di ricezione non corrisponde all'hash dichiarato nella firma (tag bh=). Il corpo del messaggio è stato modificato tra la firma e la verifica. Le cause più frequenti sono i relay che aggiungono un footer, i sistemi antivirus e gli strumenti di riscrittura URL.

Un'email può essere recapitata nonostante un errore DKIM?

Sì. DKIM da solo non determina la consegna. È la policy DMARC del dominio a decidere: con p=none, l'email viene recapitata anche se DKIM fallisce. Con p=reject, l'email viene rifiutata solo se anche SPF fallisce (DMARC richiede che almeno uno dei due passi). Molti provider recapitano il messaggio nella cartella spam piuttosto che rifiutarlo.

Qual è la differenza tra dkim=fail e dkim=none?

dkim=fail significa che una firma esiste ma la sua verifica è fallita. dkim=none significa che nessuna firma DKIM è presente nel messaggio. Il primo è un problema di configurazione, il secondo indica che DKIM non è affatto attivato sul server di invio.

L'inoltro email rompe sempre la firma DKIM?

Nella maggior parte dei casi, sì. L'inoltro modifica spesso il contenuto (aggiunta di header, riscrittura di indirizzi), invalidando la firma DKIM originale. Il protocollo ARC (RFC 8617) è stato progettato per risolvere questo problema creando una catena di fiducia tra i server intermedi. Gmail e Microsoft supportano ARC.

Come verificare che la correzione DKIM abbia funzionato?

Dopo aver applicato la soluzione, invia un'email di test verso un indirizzo Gmail o Outlook. Apri gli header del messaggio ricevuto e cerca Authentication-Results. Se vedi dkim=pass, la correzione è effettiva. Puoi anche usare uno strumento di test online che mostra i risultati di autenticazione dettagliati.

📖 Glossario

  • DKIM (DomainKeys Identified Mail): protocollo di autenticazione email tramite firma crittografica, che verifica l'integrità dei messaggi in uscita.
  • Body hash: impronta SHA-256 del corpo dell'email, inclusa nella firma DKIM (tag bh=).
  • Selettore: identificativo testuale che forma l'indirizzo DNS della chiave pubblica DKIM (selettore._domainkey.dominio).
  • Canonicalizzazione: normalizzazione del messaggio (spazi, maiuscole/minuscole) prima del calcolo della firma. Modalità: simple o relaxed.
  • ARC (Authenticated Received Chain): protocollo RFC 8617 che preserva i risultati di autenticazione durante l'inoltro delle email.
  • Allineamento DKIM: verifica da parte di DMARC che il dominio d= della firma corrisponda al dominio del From:.

Genera le tue chiavi DKIM in pochi secondi: usa il Generatore DKIM per creare una coppia di chiavi RSA 2048 o Ed25519 con il record DNS pronto da pubblicare.


📚 Guide DKIM correlate

Fonti

Articoli simili