Перейти к содержимому
ecdsa.com
OpenDKIM (Authentication-Results header added by the opendkim milter); mailauth reports the same as "bad signature"DKIM

Сообщение об ошибке

dkim=fail reason="signature verification failed"

Также выводится как

  • dkim=fail (bad signature)

OpenDKIM пишет `dkim=fail reason="signature verification failed"` и при изменении заголовков, и при изменении тела (воспроизведено на OpenDKIM 2.11.0). mailauth их различает: «bad signature» для заголовков, «body hash did not verify» для тела.

Что это означает

Принимающий сервер нашёл ключ DKIM и вычислил подпись по письму в том виде, в каком оно пришло, но она не совпала: подписанные заголовки (а для OpenDKIM ещё и тело) изменились после того, как отправитель подписал письмо, или опубликованный ключ не соответствует ключу подписи. DKIM подписывает точные байты после канонизации, поэтому любое изменение на ретрансляторе — метка в теме, приписка в конце письма, перекодированная часть MIME — ломает подпись. Для DMARC это считается непройденной проверкой DKIM.

Почему это происходит

Как исправить

  1. 1.

    Сравните подписанные заголовки с полученными

    Тег `h=` перечисляет, что было подписано. Сравните эти заголовки в полученной копии с копией у отправителя (из папки «Отправленные»).

    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. 2.

    Для списков рассылки и пересылки: ARC и повторная подпись

    Посредникам, которым приходится изменять письма, следует добавлять заголовки ARC и подписывать письма от имени своего домена, чтобы получатели всё равно могли оценить исходную аутентификацию.

    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. 3.

    Проверьте, что ключ в DNS соответствует закрытому ключу

    `opendkim-testkey` подтверждает, что запись, опубликованная для селектора, соответствует ключу, которым пользуется подписант.

    bash
    opendkim-testkey -d example.com -s sel -k /etc/opendkim/keys/sel.private -vvv   # DNS record matches the private key?

Связанные ошибки

Открыть всю базу ошибок подписей