Exim 對 DKIM 驗證出現誤報

Exim 對 DKIM 驗證出現誤報

我使用 exim4 的郵件伺服器有一個 ACL 來檢查 DKIM 簽章。它接受所有內容,但會記錄失敗並寫入包含結果的標頭。

我正在從另一台伺服器發送郵件,我相信該伺服器正確地添加了 DKIM 簽章。 (例如,我已將郵件發送到 gmail 和 Outlook 位址,檢查了標頭,這兩個系統都給了 DKIM 通過。)但是我的郵件伺服器說bodyhash_mismatch

我的郵件伺服器並不總是說 DKIM 失敗。

這是一封電子郵件。我已經更改了網域:

  • 範例.org這是主要組織的領域;它用在從:標頭,它是簽署者網域。
  • 寄件者.example.org這是發送電子郵件、建立 DKIM 標頭的伺服器。這是回程路徑標頭。
  • 接收者.example.org這是我的郵件伺服器的網域,正在其中驗證 DKIM。這是X-dkim-check添加標題的地方,下面的文字domain=來自$dkim_cur_signer
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: from mail.receiver.example.org
    by mail.receiver.example.org with LMTP
    id t8rHGepc52SOVA8ADCPZSA
    (envelope-from <[email protected]>)
    for <[email protected]>; Thu, 24 Aug 2023 14:36:42 +0100
Received: from sender-rdns.example.org ([1.2.3.4] helo=sender.example.org)
    by mail.receiver.example.org with esmtps  (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    (Exim 4.94.2)
    (envelope-from <[email protected]>)
    id 1qZAVv-004DMU-00
    for [email protected]; Thu, 24 Aug 2023 14:36:42 +0100
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
    d=example.org; s=220151210; h=Sender:Message-Id:Subject:From:To:Date:
    Reply-To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:
    Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
    :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:
    List-Subscribe:List-Post:List-Owner:List-Archive;
    bh=ecGWgWCJeWxJFeM0urOVWP+KOlqqvsQYKOpYUP8nk7I=; b=GTY2HZVje81tRJ0/xKFNUk5d7/
    9wE7CGtwmz2APM5VTDKY6q+qIbwhCRNzc6IWZ4j0Y9FOtnuVBeNR1I5xbOuqPaf62MYQZJFjLQ3/J
    PNpOpS3i1Yd3NCZUs1iB/Q8N+ii73FrvD5k1AA8F5yzJhVeaposgbkvU5vv1s/KgqTIA=;
Received: from localhost ([127.0.0.1] helo=sender.example.org)
    by sender.example.org with esmtp (Exim 4.96)
    (envelope-from <[email protected]>)
    id 1qZAVt-001EhO-2k
    for [email protected];
    Thu, 24 Aug 2023 14:36:41 +0100
Date: Thu, 24 Aug 2023 14:36:41 +0100
To: [email protected]
From: [email protected]
Subject: test Thu, 24 Aug 2023 14:36:41 +0100
Message-Id: <[email protected]>
X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
Sender: [email protected]
X-dkim-check: DKIM test failed: (domain=example.org), signature is bad.

This is a test mailing

如何調試為什麼 exim onreceiver.example.org認為簽名不好?

(我注意到 DKIM 簽名包含許多不存在的標頭。這可能是一個原因嗎?)

編輯:新增詳細資訊:

  • 簽名 exim:4.96-15+deb12u1。
  • 接收exim:4.94.2-7~bpo10+1

答案1

我不認為“不好”訊息表達了簽名無法驗證的任何特定原因。配置正確的身份驗證結果標頭:中繼進出口告訴你的一切通過$dkim_verify_reason

嘗試查明哪個訊息失敗,我記得其他驗證程式僅在某些訊息或訊息部分大小(區塊對齊,<=16KiB,>=16MiB..您的測試訊息看起來很小)或行長度(您的測試訊息看起來很整齊)上出錯的範例,儘管不尋常,但已折疊)。

另外,比較發送時的訊息來源(理想情況下,因為它是單獨上傳到郵箱的Sent)。它可能有一些語法問題,在收到時已被丟棄,但對於簽名來說很重要。

想法:

  • 我在簽名中看到一個尾隨分號,並且在最終的 b= 標記之前沒有折疊,這有點不常見 - 測試較少,並且可能不是訊息簽名時的樣子。
  • 我還看到現代 TLS 版本與古老的 exim 版本一起使用(「所有版本的 Exim4.96 之前的版本現已過時」。)。我想知道您使用的經銷商版本是否缺少上游已應用的相關修復。

我懷疑後者導致了你的問題,基於這個補丁Debian 未應用舊穩定迄今為止。如果是這樣,它應該主要影響透過 BDAT over TLS 傳輸的小訊息。

  1. 更新到最新版本的 exim - 可能需要 Debian 升級,因為您已經在向後移植 -或者
  2. 閱讀或歸檔 Debian 錯誤報告,缺少的修復(連結到精心挑選的版本準備在 4.94.2 上應用)我懷疑有錯可能會被判斷值得拉扯,如果確實有錯在這裡 -或者
  3. 完全停用分塊支援(RFC 3030),如果這適合您的用例 -空的 chunking_advertise_hosts =不會向任何人宣布 BDAT 的可用性,這應該可以解決問題 - 對於大消息來說可能會產生巨大的效能成本。

相關內容