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 設定示例
| Type | Host / Name | Value / Points to | TTL |
|---|---|---|---|
| CAA | @ | 0 issue "letsencrypt.org" | 3600 |
| CAA | @ | 0 issuewild "digicert.com" | 3600 |
| CAA | @ | 0 iodef "mailto:security@example.com" | 3600 |
| CAA | no-ssl | 0 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 證書的子域名或內部域名很有用。