Come appare il messaggio
Authentication-Results: mx.google.com;
dkim=fail (body hash did not verify) header.i=@example.com header.s=default header.b=abc123;
spf=pass smtp.mailfrom=example.comCause frequenti
- Un gateway di posta o un antivirus aggiunge un footer o un banner dopo che il tuo server ha firmato.
- Una mailing list o un inoltro cambia l'oggetto o il testo, oppure aggiunge un footer di disiscrizione.
- Il tracciamento dei link o la riscrittura degli URL modifica il corpo.
- La canonicalizzazione rigida (
simple) si rompe con piccole modifiche come spazi o fine riga. - Il messaggio viene firmato prima di un altro filtro, oppure firmato due volte con chiavi diverse.
Verifica
- Guarda firma e risultato negli header di una mail di prova ricevuta
grep -iE '^(dkim-signature|authentication-results)' message.eml - La chiave DNS è pubblicata e valida?
- Prova la chiave sul server che firma
opendkim-testkey -d example.com -s default -vvv - Quale canonicalizzazione è impostata?
grep -i Canonicalization /etc/opendkim.conf
Soluzione
- Fai della firma l'ultimo passaggio, dopo antivirus, disclaimer e filtri, subito prima dell'invio.
- Usa la canonicalizzazione relaxed:
Canonicalization relaxed/relaxed. - Togli o sposta footer e banner aggiunti dopo la firma, oppure aggiungili prima.
- Spegni la riscrittura dei link per la tua posta in uscita, oppure firma dopo.
- Per le mailing list affidati all'allineamento SPF e a una policy DMARC
p=noneoquarantine; le liste modificano i messaggi per natura.
Domande frequenti
Che differenza c'è con “signature did not verify”?
“Body hash did not verify” significa che il testo è cambiato. “Signature did not verify” di solito significa che la chiave DNS non corrisponde a quella privata, oppure che gli header firmati sono cambiati.
Un errore DKIM significa sempre spam?
No. Se SPF passa ed è allineato, DMARC può comunque passare. Ma un DKIM rotto indebolisce la consegna, quindi vale la pena sistemarlo.