Web 安全的有效性依赖于 SSL 证书。SSL 证书采用公钥基础设施(PKI)方法,通过只允许预期的接收方解密特定类型的加密通信,以密码学方式保护网站。近年来,Web 的公钥基础设施(PKI)遭遇了严峻的安全折损,多年来不断呼吁引入关键性的安全机制。为遏制 PKI 折损而采取的一项举措,便是证书颁发机构授权(CAA,Certificate Authority Authorization)DNS 记录。
CAA 技术赋予域名所有者自由创建 DNS CAA 记录的能力,该记录声明了哪些证书颁发机构(CA)被允许为该域名签发证书。CAA 非常有用,因为它能显著减少因恶意人士的失误或行为而导致的证书误签发事件。
什么是 CAA DNS 记录?
CAA DNS 记录指定了可以为特定域名签发证书的证书颁发机构(CA)。该记录相当于域名持有者的一份声明,说明哪些 CA 被授权向特定域名签发 SSL 证书。因此,记录使证书颁发机构能够自行判断自己是否被授权为该域名签发证书。CAA DNS 记录至关重要,其使用量持续上升也就不足为奇了。除了声明谁可以为该域名签发证书外,CAA 记录还提供了在有人向未获授权的 CA 申请证书时,指示通知指南的手段。
若不存在 CAA DNS 记录,任何证书颁发机构都可以自由为该域名签发证书;反之,若存在 CAA 记录,则只有记录在案的证书颁发机构才被允许为该域名签发证书。CAA DNS 记录还可为整个域名或特定主机名设定策略。同样重要的是,除非被覆盖,否则主域名的 CAA 记录会贯穿其所有子域名。例如,www.domain.com 的 CAA 记录将适用于其所有子域名,如 login.domain.com 与 blog.domain.com。CAA DNS 记录通常同时控制通配符 SSL 证书与单域名 SSL 证书的签发。
找不到 CAA 记录时会发生什么?
当找不到 CAA 记录时,恶意黑客可以迅速为你的域名生成证书签名请求(CSR),并让任意域名为其签名——这是一种你绝不应允许发生的安全威胁。
DNS CAA 记录长什么样?
参见下方图片。CAA DNS 记录的组成部分将在下一节解释。
CAA 记录包含哪些内容?
请注意,本文将围绕 RFC 8659 中规定的 CAA 记录规范表示格式展开讨论(该标准已使 RFC 6844 作废)。正如你在上方图片中所见,CAA 记录的配置看起来相当规整——前提是你理解每一部分的含义,否则可能会令人困惑。下面我们来看看 DNS CAA 记录的组成部分。
Flags(标志位)
标志位指示记录是"关键"(critical)还是"非关键"(non-critical)。在 RFC 6844 中,1 表示关键,0 表示非关键,默认通常为 0。不过,证书颁发机构也可自行定义标志位,并就证书签发给出具体指令。以 1 表示的标志位向证书颁发机构传达:除非 CA 对该属性有清晰理解,否则不得使用区域中的 CAA DNS 记录——更准确地说,证书颁发机构将不会为该域名签发证书,并应通过电子邮件将 CAA 记录检查失败的情况通知域名持有者。以 0 表示的标志位意味着,无论 CA 是否清晰理解该属性,都可以自由使用区域中记录的信息;若 CA 无法理解该属性,可以跳过并继续在 DNS 区域文件中查找其他记录。
Tags(标签)
标签是 CAA 记录的第二个要素,负责控制 DNS 记录的签发。共有三个标签层级:issue 标签、issuewild 标签与 iodef 标签。issue 标签授权单一证书颁发机构为特定域名及其子域名签发除通配符 SSL 之外的 SSL 证书;issuewild 标签仅授权单一证书颁发机构为该域名及其子域名签发通配符 SSL 证书;iodef(incident object description exchange format,事件对象描述交换格式)标签则提供有关任何无效证书申请的信息,这对域名持有者至关重要,因为它使其能够通过邮件接收关于未通过 CAA 检查的证书申请的通知,从而及时掌握相关问题并诊断导致失败的错误。
Value(值)
值通常出现在两个括号之间,指代被授权为该域名签发 SSL 证书的证书颁发机构域名。若值是一个分号,则意味着没有任何证书颁发机构有权为该域名签发证书。
TTL
CAA 记录的最后一个要素是 TTL(Time to Live,生存时间),指服务器应在其缓存中保留你的 CAA 记录的秒数。
DNS CAA 记录示例
假设我们要为 yourdomain.com 配置 CAA DNS 记录。如果 yourdomain.com 指定只有 GeoTrust 与 Thawte 可以为其签发非通配符 SSL 证书,则 CAA 记录如下:
yourdomain.com CAA 0 issue "Geotrust.com"
yourdomain.com CAA 0 issue "Thawte.com"
再假设 yourdomain.com 决定只允许 Thawte 签发通配符 SSL 证书,而 GeoTrust 签发非通配符 SSL 证书,则 CAA 记录如下:
yourdomain.com CAA 0 issue "geotrust.com"
yourdomain.com CAA 0 issuewild "thawte.com"
当域名持有者想为 CAA 记录设置 IODEF 属性时,配置如下:
yourdomain.com CAA 0 issue "geotrust.com"
yourdomain.com CAA 0 iodef "mailto:email@yourdomain.com"
yourdomain.com CAA 0 iodef "http://iodef.yourdomain.com"
如何添加、编辑或创建 CAA 记录?
作为域名所有者,你有多种方式可用于为域名或子域名创建、编辑或添加 CAA 记录,例如使用你的控制面板或域名注册商的 DNS。下面我们分别整理使用控制面板与域名注册商的操作步骤。
如何在域名注册商处添加 CAA 记录?
这是添加 CAA 记录的基础方法,具体取决于域名服务商,会因注册商不同而有所差异。以下以 GoDaddy 为例说明添加 CAA 记录的步骤:
- 登录 GoDaddy 域名控制中心(Domain Control Center)。
- 选择你的域名,进入域名设置(Domain Settings)页面。
- 在"附加设置"(Additional Settings)中,选择"管理 DNS"(Manage DNS)。
- 在记录表末尾点击"添加"(Add),如图所示。
- 点击"类型"(Type)并选择 CAA。
- 输入 CAA 记录详情:名称(Name)、标志位(Flags)、标签(Tag)、值(Value)、TTL,然后保存。
如何在主机控制面板中添加 CAA 记录?
主机控制面板类型繁多,cPanel 是其中之一。以下以 cPanel 为例说明添加 CAA 记录的步骤:首先登录你的 cPanel 账户,导航至"域名"(Domains)区域并点击"区域编辑器"(Zone Editor)标签;点击区域编辑器后,找到你要添加 CAA 记录的域名,确认后点击"管理"(Manage)标签;在区域编辑器标签中,找到标有"添加记录"(Add Record)的蓝色按钮,下拉列表中选择"添加 CAA 记录"(Add CAA Record);随后会弹出所选域名的区域编辑器菜单,你需要填写以下缺失信息:网站名称、要添加 CAA 记录的域名与子域名、标志位、标签、值。填写完毕后,点击右侧的"添加记录"标签即可保存更新。
CAA 如何工作,以及证书颁发机构授权在证书签发中的作用
CA/B 论坛在其一项规定中,要求所有商业 CA 在为该域名签发 SSL 证书之前,必须先检查 CAA 记录。因此,当 CA 收到签发 SSL 证书的请求时,第一件事就是检查该域名是否存在 CAA 记录。
若存在 CAA 记录,证书颁发机构必须检查并确认自己是否被授权为该域名签发 SSL 证书,同时还需核对 CAA 记录规范,判断是否符合要求。若 CA 满足所有门槛,便可继续签发证书;若不满足任一规范,则应拒绝该请求。若不存在 CAA DNS 记录,证书颁发机构则可直接签发证书。证书颁发机构授权在证书签发中扮演着至关重要的角色,它既是一种控制机制,也是一种安全机制。如果你面对多家 CA,却只需挑选最合格、最受信任的一家,那么 CAA 概念将大有用处——你可以指定哪家 CA 被授权签发证书,且只有该 CA 能够这样做。这类策略在已制定明确采购政策的大型机构中尤为重要,可能要求由特定 CA 来签发证书。坦诚地说,跨部门传达这类政策并非易事,试想一名新员工入职后不了解政策,轻易地向错误的 CA 申请了证书;但若机构使用了 CAA 记录,即便是新人也能轻松地从受信任且获授权的 CA 处获取证书。
为什么应考虑为域名创建 CAA DNS 记录?
创建 CAA DNS 记录的最大优势在于规避证书误签发问题,但这并非唯一理由,其他理由还包括:
- 创建 CAA DNS 记录有助于保护域名持有者的身份,通过指定哪些 CA 可签发证书,杜绝黑客从不获授权的 CA 申请证书的可能。
- 创建 CAA DNS 记录有助于防止影子证书(shadow certificates)。
- CAA 有助于表达你对特定证书颁发机构的偏好与支持。
- 借助证书颁发机构授权,证书管理更加轻松,因为你将它们纳入了统一的管理之下,比追踪来自多家 CA 的证书更为简便。
结语
尽管并非万无一失,证书颁发机构授权仍是防止证书误签发的一种相对经济高效的方法。它与其它技术与工具配合使用,能最佳地保护你的域名与网站。你已经看到了创建 CAA DNS 记录的诸多优势,本文也对 CAA 及其重要性给出了更清晰的阐释,并提供了创建或更新 CAA 记录的明确步骤,助你像行家一样管理证书。