Mensaje de error
dkim=fail reason="signature verification failed"
También se muestra como
- dkim=fail (bad signature)
OpenDKIM escribe `dkim=fail reason="signature verification failed"` tanto para los cambios en los encabezados como para los cambios en el cuerpo (reproducido con OpenDKIM 2.11.0). mailauth los distingue: «bad signature» para los encabezados y «body hash did not verify» para el cuerpo.
Qué significa
El servidor receptor encontró la clave DKIM y calculó la firma sobre el mensaje tal como llegó, y no coincidió: los encabezados firmados (o, en el caso de OpenDKIM, también el cuerpo) cambiaron después de que el remitente firmara el mensaje, o la clave publicada no corresponde a la clave de firma. DKIM firma bytes exactos después de la canonicalización, así que cualquier reescritura por parte de un servidor de retransmisión (una etiqueta en el asunto, un pie de página, una parte MIME codificada de nuevo) la rompe. A efectos de DMARC, esto cuenta como una comprobación DKIM fallida.
Por qué ocurre
Un servidor de retransmisión cambió un encabezado firmado
frecuenteListas de correo que etiquetan el encabezado Subject (`[team]`), pasarelas que reescriben `From` o `To`, o dispositivos de seguridad que cambian `Content-Type`. La firma cubre todos los encabezados que figuran en `h=`.
Pies de página, avisos legales o cambio de codificación
frecuenteLos avisos legales añadidos, la reescritura de enlaces, los banners que inserta el antivirus o la conversión de contenido de 8 bits a quoted-printable alteran el cuerpo. Sin `l=`, cuenta cada byte.
La clave del DNS no coincide con la clave de firma
ocasionalTras una rotación de claves, el registro TXT del selector aún contiene la clave pública antigua, o dos servidores firman con el mismo selector pero con claves privadas distintas.
El firmante modificó el mensaje después de firmarlo
ocasionalFirmar antes de que un filtro de contenido añada encabezados o reescriba el mensaje (el orden de los milters en Postfix), o una biblioteca de envío del remitente que firma y después cambia los finales de línea.
Cómo solucionarlo
- 1.
Comparar los encabezados firmados con los recibidos
La etiqueta `h=` indica qué se firmó. Compara esos encabezados en la copia recibida con una copia tomada en el lado del remitente (la carpeta Enviados).
bash # Which headers did the signature cover, and what do they look like now? grep -i "^DKIM-Signature" -A4 received.eml | grep -o "h=[^;]*" grep -iE "^(From|To|Subject|Date|Message-ID|Content-Type):" received.eml - 2.
Listas y servicios de reenvío: ARC y una nueva firma
Los intermediarios que tienen que modificar los mensajes deberían añadir encabezados ARC y firmar con su propio dominio, para que los receptores puedan seguir evaluando la autenticación original.
text # Mailing list / forwarder: add ARC and re-sign with the list's own domain (Mailman 3 example) [ARC] enabled: yes authserv_id: lists.example.org domain: lists.example.org selector: arc2026 privkey: /etc/mailman3/arc.private - 3.
Comprobar que la clave del DNS corresponde a la clave privada
`opendkim-testkey` confirma que el registro publicado para el selector coincide con la clave que usa el firmante.
bash opendkim-testkey -d example.com -s sel -k /etc/opendkim/keys/sel.private -vvv # DNS record matches the private key?