迁移域名至Route53后Certbot证书续期失败,遭遇DNSSEC相关错误
我太懂你这种糟心感了——用了四年的Certbot一直稳得一批,刚把域名迁去Route53就掉链子,还跟DNSSEC扯上线,确实摸不着头脑。先帮你理清楚问题根源:你的是.se域名,原服务商Loopia默认给这类域名开启了DNSSEC,虽然你在Route53里没主动开,但域名注册商层面的DNSSEC签名记录还残留着,导致DNS查询时验证失败,Certbot自然没法完成续期。
先对应你遇到的两个错误:
Detail: DNS problem: looking up A for somedomain.com: DNSSEC: DNSKEY Missing; DNS problem: looking up AAAA for somedomain.com: DNSSEC: DNSKEY Missing
(后续删除Route53记录后)Detail: DNS problem: looking up A for somedomain.com: DNSSEC: DNSKEY Missing; DNS problem: looking up AAAA for somedomain.com: DNSSEC: Bogus
第一个错误是DNS服务器预期找到DNSSEC密钥但找不到;第二个"Bogus"则是因为注册商那边还挂着DNSSEC配置,但对应密钥已经被你删掉,验证直接失败。下面给你一步步解决:
1. 彻底清理注册商层面的DNSSEC记录
登录Route53控制台,进入「已注册域名」找到你的.se域名:
- 查看「DNSSEC状态」,如果有任何残留的DNSKEY、DS记录,全部删除
- 确认保存后,耐心等待DNS缓存刷新(一般需要12-24小时,
.se域名的TTL可能更短,但保险起见给够时间)
2. 临时用DNS验证方式绕开HTTP验证(应急方案)
如果不想等缓存刷新,先让证书续上,可以用Certbot的Route53 DNS验证插件,直接通过Route53添加验证记录,绕开依赖正常DNS查询的HTTP验证:
- 先安装插件:
sudo apt install python3-certbot-dns-route53 - 创建一个IAM用户,给它分配
AmazonRoute53FullAccess权限(或者更精细的权限:允许修改你的域名托管区的记录),生成Access Key和Secret Key,保存到~/.aws/credentials文件,格式如下:[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY - 执行续期命令:
sudo certbot renew --dns-route53
3. 验证DNSSEC状态是否彻底清除
等一段时间后,用命令行检查:
- 运行
dig +dnssec somedomain.com DNSKEY,如果没有返回任何DNSKEY记录,说明清理成功 - 运行
dig somedomain.com A和dig somedomain.com AAAA,确保输出里没有DNSSEC相关的错误提示
等DNSSEC状态完全正常后,你再用原来的certbot renew --apache命令,应该就能正常续期了。
备注:内容来源于stack exchange,提问作者Malako

