域名SSL证书申请时提示:域名验证失败 TXT解析记录不匹配
记录一次在申请证书遇到域名验证失败时的排查过程,问题出在 DNS 的 TXT 记录值没配对。
在申请免费证书,偶尔会碰到验证域名这一步报错。lcjmSSL的站内消息里给的提示大概是这样的:
验证域名(xxx)失败
查找 http://_acme-challenge.xxx 的 TXT 解析记录为 aaaaa,应该为 bbbbbb。
这个报错其实已经把问题说得很透了——DNS 的 TXT 记录值不匹配。提示里给出的两个值,一个是你当前解析的 aaaaa,一个是期望值 bbbbbb,把 aaaaa 改成 bbbbbb 就完事了。
操作上不复杂。去你的域名 DNS 管理后台,找到那条主机记录为 _acme-challenge 的 TXT 记录,把记录值改掉。如果压根没有这条记录,就直接新建,记录类型选 TXT,主机记录填 _acme-challenge,记录值填 bbbbbb,TTL 用默认的就行。

但这里有个时间差的问题,刚改完马上去验证十有八九还是报错。DNS 生效没那么快,尤其是一些小厂的 DNS 服务或者海外的域名注册商,等三五分钟是常事,慢的时候十几二十分钟也遇到过。我当时有一次改完连点三次验证都失败,差点以为自己改错了,其实就是解析没同步过去。可以先用 dig 或者 nslookup 查一下,确认新的记录值已经返回了再点验证,省得干着急。
dig 的话,跑一下这条:
dig _acme-challenge.你的域名 txt
返回结果里看到 bbbbbb 了,说明生效了,这时候再去验证,基本一把过。
还有一个容易踩坑的地方是,有些 DNS 后台在填主机记录的时候会自动在后面拼上你的域名。比如你的域名是 xxx,你在主机记录里填了 _acme-challenge,它实际生成的是 _acme-challenge.xxx,这个是对的。但如果你填成了 _acme-challenge.xxx,它可能会变成 _acme-challenge.xxx.xxx,这就多了一层,解析自然就不对了。各家处理方式不一样,第一次用某个平台的时候留意一下它到底怎么拼的。
另外,如果用的是 Cloudflare 这类开了代理的 CDN 服务,注意 TXT 记录要关掉代理,也就是云朵图标保持灰色就行。TXT 记录走代理没意义,反而可能干扰验证。
回到 lcjmSSL本身,它其实把申请流程简化了不少。不需要自己装 acme.sh,不用敲命令,页面上点几下就能把证书申请下来。出了错站内消息也会把错误原因和期望值都列出来,比如刚才那个 aaaaa 和 bbbbbb 的对比,看着改就行。
遇到问题别急着去搜各种教程,先看一眼站内消息,大部分时候答案已经在里面了。
如果改完解析等了很久还是不行,可以检查一下域名的 NS 记录是不是指向了你在操作的那个 DNS 服务商。有些人域名在 A 家买的,NS 改到了 B 家,结果还在 A 家的后台改解析,那肯定是改了个寂寞。这个场景偶尔会出现,排查的时候可以顺手确认一下。

浙公网安备 33010602011771号