域名解析之 CAA

由于之前把域名托管在 cloudflare ,感觉解析比较慢,于是换到了阿里云,为了使用 letsencrypt 自动续签证书功能,我决定重新使用阿里云的 ak和sk 申请一下证书,在使用 letsencrypt 签发证书时发现报错缺少 CAA

1
2
3
4
5
6
7
8
9

[2019年 03月 22日 星期五 11:09:28 CST] Sign failed, finalize code is not 200.
[2019年 03月 22日 星期五 11:09:28 CST] {
"type": "urn:ietf:params:acme:error:caa",
"detail": "Error finalizing order :: Rechecking CAA: While processing CAA for awen.me: DNS problem: SERVFAIL looking up CAA for awen.me, While processing CAA for *.awen.me: DNS problem: SERVFAIL looking up CAA for awen.me",
"status": 403
}
[2019年 03月 22日 星期五 11:09:28 CST] Please add '--debug' or '--log' to check more details.
[2019年 03月 22日 星期五 11:09:28 CST] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh

什么是 CAA

CAA(Certification Authority Authorization,证书颁发机构授权)是一项防止HTTPS证书错误颁发的安全措施,遵从IETF RFC6844。从2017年9月8日起,要求CA(Certification Authority,证书颁发)机构执行CAA强制性检查。

它被定义在 RFC6844,其目的是用来指定域名允许哪个证书颁发机构(CA)为其颁发证书。防止钓鱼攻击者使用该域名申请 SSL 证书。

它们还提供了一种方法来指示通知规则,以防有人从未经授权的 CA 颁发证书。在没有 CAA 记录的情况下,所有 CA 均可为该域名颁发证书。当然如果存在 CAA 记录,CA 必须遵守规则,只能是在记录列表中的 CA 才被允许。

CAA记录可以为整个域或特定主机名设置策略。CAA 记录也被子域继承,因此 CAA 记录集 example.com 也将适用于任何子域,例如 subdomain.example.com(除非被覆盖)。CAA 记录可以控制发行单域名证书,通配符证书或同时。

CAA标准

CAA标准是指域名所有者在其域名DNS记录的CAA字段中,授权指定的CA机构为其域名颁发证书。

全球约有上百个CA机构有权发放HTTPS证书,证明您网站的身份。CAA标准可以使网站将指定CA机构列入白名单,仅授权指定CA机构为网站的域名颁发证书,防止HTTPS证书错误颁发。设置CAA记录是提高网站安全性的方法之一。

CA机构在为域名签发证书时执行CAA强制性检查:

  • 如果检查域名的DNS记录,发现未设置CAA字段,则为该域名颁发证书。

    这种情况下,任何CA机构均可为该域名签发证书,存在HTTPS证书错误颁发的风险。

  • 如果检查域名的DNS记录,在CAA字段发现获得授权,则为该域名颁发证书。

  • 如果检查域名的DNS记录,在CAA字段发现未获得授权,则拒绝为该域名颁发证书,防止未授权HTTPS证书错误颁发。

CAA记录

CAA记录由一个[flag]标志字节和一个被称为属性的[tag]-[value]标(标签-值)对组成,可以将多个CAA字段添加到域名的DNS记录中。

目的 样例 描述
设置单域名CAA记录 domain.com. CAA 0 issue “ca.example.com” 该字段表示只有ca.example.com可以为域名domain.com颁发证书,未经授权的第三方CA机构申请域名domain.com的HTTP证书将被拒绝。
domain.com. CAA 0 issue “;” 该字段表示拒绝任何CA机构为域名domain.com颁发证书。
设置发送警报通知 domain.com. CAA 0 iodef “mailto:[email protected] 该字段用于当第三方尝试为一个未获得授权的域名申请证书时,通知CA机构向网站所有者发送警报邮件。
domain.com. CAA 0 iodef “http:// domain.com/log/“domain.com. CAA 0 iodef “https:// domain.com/log/“ 该字段用于记录尝试在其他CA申请HTTPS证书的行为。
设置颁发通配符域名证书 domain.com. CAA 0 issuewild “ca.example.com” 该字段用于将通配符证书的颁发权限指定CA机构ca.example.com。
综合配置样例 domain.com. CAA 0 issue “ca.abc.com”domain.com. CAA 0 issuewild “ca.def.com”domain.com. CAA 0 iodef “mailto:[email protected] 该字段表示域名domain.com:授权CA机构ca.abc.com颁发不限类型的证书。授权CA机构ca.def.com颁发通配符证书。禁止其他CA机构颁发证书。当有违反设置规则的情况发生,CA机构发送通知邮件到[email protected]

验证CAA解析记录是否生效?

CAA解析记录可以通过dig+trace命令查看域名是否生效以及具体的解析过程。

命令格式为:dig [类型] [域名] +trace。

示例如下:

dig caa www.example.com +trace

CAA 记录格式

CAA 记录由以下元素组成:

标签 描述
flag 0-255 之间的无符号整数
tag 用来表示关键标志,RFC 有定义
value 与 tag 关联的值

CAA 记录的规范的表示法是:

1
CAA <flags> <tag> <value>

RFC 目前定义了 3 个可用的 tag:

  • issue:明确授权单个证书颁发机构颁发主机名的证书(任何类型)。
  • issuewild:明确授权单个证书颁发机构为主机名颁发通配符证书(只有通配符)。
  • iodef:指定认证机构可以向其报告策略违规的URL或邮箱。

实战

登录https://sslmate.com/caa 输入你的域名,会自动生成CAA记录

然后在阿里云添加解析即可。

查询解析结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 dig CAA awen.me

; <<>> DiG 9.10.6 <<>> @114.114.114.114 CAA awen.me
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21875
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;awen.me. IN CAA

;; ANSWER SECTION:
awen.me. 600 IN CAA 0 issue "digicert.com"
awen.me. 600 IN CAA 0 issue "letsencrypt.org"
awen.me. 600 IN CAA 0 issue "sectigo.com"

;; Query time: 138 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Fri Mar 22 11:35:29 CST 2019
;; MSG SIZE rcvd: 120

允许 签发通配符证书 记录值需要设置0 issuewild "letsencrypt.org",如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
; <<>> DiG 9.10.6 <<>> @114.114.114.114 CAA awen.me
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48933
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;awen.me. IN CAA

;; ANSWER SECTION:
awen.me. 493 IN CAA 0 issuewild "letsencrypt.org"

;; Query time: 48 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Fri Mar 22 11:52:59 CST 2019
;; MSG SIZE rcvd: 74