本文へスキップ
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?

関連するエラー

署名エラーデータベースをすべて見る