為什麼需要檢查 CAA 紀錄?
CAA 紀錄是網域持有人在 DNS 裡公開宣告「只有這幾家 CA 可以替我簽發憑證」;CA 簽發憑證前須事先檢查自己是否在允許宣告中,否則就是侵犯網域持有人設下的限制。
CAA 紀錄為網域持有人所設定的安全邊界
全球有數十家公開信賴的 CA,任何一家在技術上都能替任何網域簽發憑證。對網域持有人來說,這代表自己處於風險中,因為只要有一家「驗證程序最寬鬆的 CA」被騙過或被入侵,就會出現一張技術上合法、但根本不該存在的憑證,而網域持有人完全無法阻止。
CAA(授權憑證機構簽發憑證)紀錄把選擇權交回至網域持有人手上:只要於 DNS 裡寫明「只有 X、Y 兩家可以替我簽發憑證」,其他 CA 在簽發憑證前查到這筆不含自己的 CAA 紀錄就必須拒絕。這是少數由網域持有人可主動設定、對全世界公開 CA 都具有強制力的防護,也是事後追查的依據——CA 必須在自己的憑證實務作業基準(CPS)中寫明自己認可哪些 CAA 紀錄內容的設定字串。
範例
最常見的問題是「為什麼我都已經通過控管權驗證了,還要設定或移除 CAA 紀錄」。因為多數情況下申請者的 DNS 中有這樣的紀錄:
example.com. 14400 IN CAA 0 issue "other-ca.com"
只授權了別家 CA 可對自己簽發憑證。處理方式是申請者新增一筆欲申請的憑證機構(CA)可以對自己簽發憑證的 CAA 紀錄(CAA 設定內容請以 CA 提供的字串為準),或移除所有 CAA 紀錄(資安觀點上不建議)。
兩個操作上的重點:
- 萬用網域憑證看的是
issuewild。如果只設定issue屬性標籤卻申請*.example.com,仍可能遭拒絕。萬用網域的 CAA 設定方法(範例)為:text @ IN CAA 0 issuewild "ca.com" - CAA 會沿著網域樹狀圖向上尋找。即使
www.example.com沒有設定 CAA,仍會向上尋找裸網域example.com的 CAA 設定;所以在上層網域設定的 CAA 紀錄,會一併套用到所有子網域。
反過來說,若「要避免別家 CA 亂發我的憑證」,答案就是設定 CAA 紀錄。
《基本要求》的規定
- CA 應(MUST)在簽發流程中,針對憑證
subjectAltName擴充欄位內每個非 Onion 網域名稱的dNSName,依 RFC 8659 取得並處理 CAA 紀錄;相關實務作業須寫在 CA 的 CP/CPS 第 4.2 節,包含 CA 認可的簽發者網域名稱集合。 - 須處理
issue、issuewild、iodef屬性標籤,並遵守關鍵性旗標(critical flag)——遇到設有該旗標又無法識別的屬性標籤時不得簽發。 - 檢查完 CAA 後,應(MUST)在該紀錄的 TTL 或 8 小時(取較長者)內完成簽發,逾時要重新檢查。
CAA 紀錄檢查同樣須符合第 3.2.2.9 節的多視角簽發佐證要求。