DNSSEC 當驗證者可以建立信任鏈時,將原始身份驗證和完整性加入DNS資料中。它不會加密DNS答案、批准發送服務或驗證訊息內容。它對電子郵件的價值來自於保護DNS依賴性,當驗證鏈中斷時會產生可用性後果。
驗證鍊而不是簽名的存在
參考: RFC 4033 §3, RFC 4035 §5.
簽名的答案包含加密材料,但僅存在 RRSIG 並不能成功驗證。驗證者需要一個可信賴的起點、適當的 DNSKEY 和委託資訊、可用的簽章和有效的計時。父 DS 資料和子金鑰在變更期間必須保持協調。
使用具有已知信任配置的驗證解析器或支援驗證的診斷程序。如果應用程式依賴解析器的經過驗證的資料指示,則到該解析器的路徑和信任關係就很重要。僅使用工具請求DNSSEC記錄並不會使該工具進行驗證,且權威應答標誌也不是DNSSEC驗證結果。
將驗證狀態分開
參考: RFC 4035 §4.3, RFC 7672 §2.1.
安全結果具有針對返回資料的經過驗證的信任鏈。不安全的結果可能是合法的未簽名分支,並且與檢測到的偽造不同義。虛假結果意味著預期的驗證失敗。還必須區分不確定結果:當解析器因無法取得必要的DNSSEC記錄而無法確定是否應該對資料進行簽章時RFC 4035使用它。 RFC 7672使用RFC 4035的SMTP意義 DANE 並將這種情況視為失敗,而不是默默地將其視為未簽名。保留診斷上下文,因為RFC 4033對不確定性的描述不同。
驗證解析器可以針對虛假資料傳回SERVFAIL ,但SERVFAIL本身無法診斷DNSSEC :其他DNS故障可能會產生此錯誤。檢查驗證診斷、父 DS、子 DNSKEY、簽章和時間。不要停用驗證作為預設修復,因為這樣做會更改正在測試的信任屬性。
重現三個不同的郵件依賴關係
參考: RFC 4035 §5.2, RFC 4035 §5.4.
合成案例 A 具有簽章區域、符合的父 DS 和子 DNSKEY,以及所查詢郵件記錄的目前有效簽章。配置的驗證器的預期結果是安全的。案例 B 有一個故意未簽名的孩子,其委託中沒有 DS 的經過驗證的證明。預期結果是不安全的,而不是虛假的。
情況 C 在更換子金鑰後將舊 DS 留在父級,而沒有相容的翻轉。預期結果是驗證鏈損壞,並且對於定義的驗證解析器固定裝置, SERVFAIL會變成普通查詢。非驗證直接查找可能仍會顯示TXT或 MX記錄。這種差異並不能證明驗證解析器是錯的。
僅在具有自己的信任錨的一次性簽名測試層次結構中重現這些情況。保留父 DS、子 DNSKEY、查詢記錄、RRSIG、解析器配置、時脈和詳細驗證追蹤。查詢每種情況下相同的所有者和類型並比較分類狀態。這些遞歸解析器場景是測試規範,而不是聲稱的即時簽章區域部署或遞歸驗證器執行。後來捕獲的離線驗證案例部分記錄了 2026 年 11 月 7 日捕獲的單獨的、有界的加密裝置;它沒有觀察到SERVFAIL或測試集成SMTP DANE 。
了解DANE附加要求
參考: RFC 7672 §2.2, RFC 7672 §3.
SMTP DANE使用 DNSSEC 驗證 TLSA 關聯和發送方支援以驗證傳輸。單獨對網域進行簽章不會建立所需的 TLSA 記錄或使每個寄件者強制執行DANE 。 MX和 TLSA 發現路徑以及憑證關聯需要根據RFC 7672進行自己的驗證。
即使DNSSEC保持正常運行,憑證或金鑰翻轉也可能會破壞 TLSA 匹配。相反,損壞的DNSSEC鏈可能會阻止支援的寄件者安全地使用其他正確的 TLSA 資料。將兩層一起規劃並保留受控制的SMTP測試。 DANE和DNSSEC都不能取代 SPF, DKIM 或者 DMARC.
將簽章作為維護的依賴項進行操作
參考: RFC 6781 §4.1.
記錄簽章、註冊商 DS 更新、金鑰輪轉和監控的所有權。在更改DNS提供者之前,請確定是否保留或轉換金鑰和鏈。監視相關路徑的簽章有效性和驗證,並在關閉故障之前要求恢復證據。報告觀察到的確切DNS信任和郵件行為,而不是聲稱簽署的DNS可以確保所有電子郵件的安全。
捕獲的離線驗證案例
參考: RFC 4035 §5.
保留的捕獲(已檢查但未為本次審查重新運行)記錄了一個孤立的加密裝置於 2026 年 11 月 7 日20:34:42 UTC 使用 Python 3.12.14 和 dnspython 2.9.2 執行。例如,它將產生的父 DNSKEY 作為其實驗室信任錨,為signed.example產生子金鑰,使用父金鑰簽署子 DS 並簽署測試 TXT記錄 與兒童鑰匙。 DS 和TXT的實際簽章檢查成功,計算出的 SHA-256 DS 與孩子的 DNSKEY 相符。捕獲的結果是經過驗證的離線鏈。
對於斷鍊情況,夾具會產生替換子金鑰,同時保留舊 DS。計算出的 DS 不再匹配,夾具拒絕了該鏈。它沒有運行遞歸驗證器,也沒有觀察到SERVFAIL 。對於未簽署的情況,它在unsigned.example上驗證了父簽署的 NSEC,其確切名稱位圖包含 NS 並省略了 DS,然後將該委託歸類為不安全。這個狹隘的證明並沒有實現一般的否認存在解析器。
要重現,請建立 ECDSA P-256 父密鑰和子密鑰,建立 DNSKEY 和 DS 記錄,使用有限的啟動/過期時間對 DS 和TXT進行簽名,並根據固定的父密鑰和匹配的子密鑰呼叫 dnspython 的DNSSEC驗證操作。更換不匹配情況下的子密鑰。對於未簽署的情況,請驗證精確委託 NSEC 簽章並檢查其點陣圖。保留金鑰的公開記錄、簽署、驗證時間、依賴版本和結果;保持測試私鑰是一次性的。證據顯示實際的本地加密操作,而不是公共DNS驗證、生產SMTP DANE或已部署的遞歸解析器。