CAA 記錄

DNS 證書頒發機構授權(CAA)記錄是一種 DNS 資源記錄類型,允許域名所有者明確聲明哪些證書頒發機構(CA)有權為其域名或特定主機名頒發 SSL/TLS 證書。它作為一種安全政策機制,為防止未經授權的證書頒發提供了額外的保護層。

How it works

預設情況下,每個公開證書頒發機構都被允許為公開 DNS 中的任何域名頒發證書,只要它們驗證了對該域名的控制權。CAA 記錄通過允許域名所有者建立授權 CA 的白名單來改變這一點,防止證書被錯誤頒發,否則這些證書可能被用於釣魚或中間人攻擊等惡意活動。

當證書頒發機構收到頒發證書的請求時,它必須執行 CAA 資源記錄的 DNS 查詢。如果找到任何 CAA 記錄,CA 必須確保它在至少一條記錄中被列為授權方,然後才能繼續頒發證書。 該流程如下: 1. 有人從 CA 請求您域名的 SSL/TLS 證書 2. CA 對您的域名執行 CAA 記錄的 DNS 查詢 3. 如果在子域名上沒有找到 CAA 記錄,CA 會按層次檢查父域名 4. 如果存在 CAA 記錄,CA 檢查自己是否被列為授權方 5. 如果獲得授權,CA 繼續頒發證書;否則,必須拒絕 CAA 記錄包括標誌、標籤和值。標誌(通常為 0)表示該屬性的重要程度。標籤-值對構成一個指定授權規則的屬性。

Key Points

  • CAA 記錄防止未經授權的 CA 為您的域名頒發證書
  • 業界標準要求證書頒發機構在頒發證書前必須檢查 CAA 記錄
  • CAA 記錄按層次檢查 - 如果在子域名上未找到,則檢查父域名
  • 記錄格式為:flags tag "value"(例如,0 issue "letsencrypt.org"
  • CAA 於 2019 年通過 RFC 8659 和 RFC 8657 標準化,是一種相對現代的安全機制

Common Use Cases

  • 證書頒發機構白名單: 明確授權僅特定的 CA(如 Let's Encrypt 或 DigiCert)可以為您的域名頒發證書,阻止所有其他 CA
  • 通配符證書控制: 使用 issuewild 標籤為通配符證書和普通證書指定不同的授權規則
  • 安全事件報告: 使用 iodef 標籤指定一個 URL,CA 可以在該地址報告有關未經授權的證書請求的安全政策違規情況
  • 子域名特定授權: 為不同的子域名設置不同的 CAA 政策,從而對整個基礎設施的證書頒發實施更嚴格的控制

code 設定示例

TypeHost / NameValue / Points toTTL
CAA@0 issue "letsencrypt.org"3600
CAA@0 issuewild "digicert.com"3600
CAA@0 iodef "mailto:security@example.com"3600
CAAno-ssl0 issue ";"3600

* CAA 記錄指定哪些證書頒發機構可以頒發證書。標誌通常為 0,常見的標籤有 'issue'、'issuewild' 和 'iodef'。

Frequently Asked Questions

證書頒發機構是否必須檢查 CAA 記錄?expand_more
是的。自 2017 年 9 月起,CA/瀏覽器論壇基線要求規定,所有證書頒發機構在頒發證書之前都必須檢查 CAA 記錄。如果存在 CAA 記錄且該 CA 未被列為授權方,CA 必須拒絕頒發證書。這使得 CAA 記錄成為一種有效的安全機制。
如果我沒有 CAA 記錄會怎樣?expand_more
如果您沒有 CAA 記錄,任何證書頒發機構都可以為您的域名頒發證書(需遵守其自身的驗證流程)。這是預設行為。雖然沒有 CAA 記錄不會使您的域名不安全,但新增一條 CAA 記錄可以為防止未經授權的證書頒發提供額外的保護層。
如何允許多個證書頒發機構?expand_more
您可以在 DNS 區域中新增多條 CAA 記錄,每個您想要授權的證書頒發機構一條。例如,您可能有一條用於 Let's Encrypt 的記錄和另一條用於 DigiCert 的記錄。只要 CA 找到至少一條授權它的 CAA 記錄,就可以繼續頒發證書。
CAA 記錄中的標誌值是什麼意思?expand_more
標誌是一個數字(通常為 0),表示該屬性的重要程度。標誌為 0 表示該屬性是非關鍵的。標誌為 128(「頒發者關鍵」標誌)表示如果 CA 不理解該屬性標籤,則必須拒絕頒發證書。實際上,大多數 CAA 記錄使用標誌值 0。
我可以阻止為某個域名頒發所有證書嗎?expand_more
可以。您可以建立一條值為空(僅分號)的 CAA 記錄,如 0 issue ";",這會告訴所有 CA,沒有人被授權為該域名頒發證書。這對於您永遠不希望頒發 SSL/TLS 證書的子域名或內部域名很有用。