由于之前把域名托管在 cloudflare ,感觉解析比较慢,于是换到了阿里云,为了使用 letsencrypt 自动续签证书功能,我决定重新使用阿里云的 ak和sk 申请一下证书,在使用 letsencrypt 签发证书时发现报错缺少 CAA
1 |
|
什么是 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 | dig CAA awen.me |
允许 签发通配符证书 记录值需要设置0 issuewild "letsencrypt.org"
,如下所示:
1 | ; <<>> DiG 9.10.6 <<>> @114.114.114.114 CAA awen.me |