CNAME记录指向vercel影响了CAA记录导致的SSL证书无法签发的问题

本文最后更新于:2021年11月28日 上午

问题

今天阿里云告知我有一个域名的SSL证书快过期了,已经是老手的我熟练地打开阿里云控制台申请证书。

但是发生了一件怪事,以往证书都能在一分钟下发,而这一次等了好久都不行。我决定先睡一觉起来再看看。

睡醒以后,打开阿里云控制台,发现还是不成功,此时我仍然怀疑是阿里云的锅。于是我用freessl再申请了一次,等到下午还是没成功。用myssl.com/检测的结果如下:

地区是否匹配
中国不匹配 (验证失败,您的CAA配置不允许当前CA为您签发证书,请修改为:symantec.com或digicert.com)
香港不匹配 (验证失败,您的CAA配置不允许当前CA为您签发证书,请修改为:symantec.com或digicert.com)
美国不匹配 (验证失败,您的CAA配置不允许当前CA为您签发证书,请修改为:symantec.com或digicert.com)

我没设置过CAA记录啊!

我心想应该不是DNS缓存的问题吧?不可能啊!

但是我还是到阿里云控制台把所有的DNS记录都暂停解析。

结果,居然成功了!成功了!

后经过排查发现是解析到vercel上的cname记录导致的问题发生,这是为啥呢?vercel还有权限帮我设置CAA记录!?

原因

后经一番搜索终于知道了原因,就是因为CAA记录惹的祸

CAA(Certificate Authority Authorization),即证书颁发机构授权。是一项新的可以添加到DNS记录中的额外字段,通过DNS机制创建CAA资源记录,可以限定域名颁发的证书和CA(证书颁发机构)之间的联系。未经授权的第三方尝试通过其他CA注册获取用于该域名的SSL/TLS证书将被拒绝。

域名设置 CAA 记录,使网站所有者,可授权指定CA机构为自己的域名颁发证书,以防止HTTPS证书错误签发,从而提高网站安全性。

补充一个知识点,CNAME记录会影响CAA记录:

CAA 记录检查继续对指向不同域的 CNAME 记录进行。在此例中,www.example.com 指向 www.example.net ,后者也有 CAA 记录:

1
2
3
4
5
6
(Example 7 / www.example.com)
Domain Record type Flags Tag Value
www.example.com. CNAME www.example.net
www.example.net. CAA 0 issue ";"

(Result: CAA failed)

第一个记录将 CAA 检查转向 www.example.net。此 CAA 记录可阻止任何 CA 颁发证书,证书办法机构无法为 www.example.com 颁发证书。

如果所指向的域 (www.example.net) 没有 CAA 记录,则 CAA 记录检查将上攀到基本域 (example.com)。

1
2
3
4
5
6
(Example 8 / www.example.com)
Domain Record type Flags Tag Value
www.example.com. CNAME www.example.net
example.com. CAA 0 issue "amazon.com"

(Result: CAA passed)

用白话说就是因为设置了cname指向vercel,而vercel设置了CAA记录,从而影响了我们的域名的CAA记录,用工具查询后发现确实如此:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"canIssue": false,
"status": "IssueMismatch",
"domain": "czqu.ren",
"queryAt": "Sep 30, 2021 11:21:55 AM",
"elapsed": 1,
"caaRecordSet": [
{
"domain": "czqu.ren",
"caaRecords": [
{
"issuerCritical": 0,
"tag": "issue",
"value": "letsencrypt.org",
"type": 257,
"dclass": 1,
"ttl": 60
},
{
"issuerCritical": 0,
"tag": "issue",
"value": "globalsign.com",
"type": 257,
"dclass": 1,
"ttl": 60
}
]
}
]
}

因此阿里云使用的免费DigiCert 证书颁发机构无法给我的域名颁发证书。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!