为映射到localhost的域名申请Let's Encrypt证书报NXDOMAIN错误
报错根本原因
修改本地/etc/hosts的映射仅对你当前使用的本机生效,Let's Encrypt的证书颁发服务器位于公网,无法读取你本地的hosts配置。当CA尝试解析dev.{MyDomain}.com的公网DNS记录时,查询不到对应的A/AAAA记录,直接返回NXDOMAIN错误,流程在DNS解析阶段就已经中断,根本不会发起后续HTTP请求拉取校验文件。
你本地能正常访问http://dev.{MyDomain}.com/.well-known/acme-challenge/<challeng-file>路径,是因为本地hosts强制把域名指向了环回地址,这个验证结果仅代表你本地服务配置正常,不代表公网CA能访问到对应资源。
可落地解决方案
根据你的开发场景选对应方案即可:
- 公网IP+HTTP校验方案
先到你的{MyDomain}.com域名解析管理后台,给dev.{MyDomain}.com添加公网A记录,指向你本地网络出口的公网IP;同时确认运营商没有封禁80端口,在路由器上配置端口映射,把80端口的入站请求转发到你本地运行校验服务的机器。等DNS记录全球生效后,重新执行证书申请命令即可。注意你之前写的校验路径存在拼写错误,正确路径前缀是.well-known/acme-challenge/,不要把challenge拼成chellenge。 - DNS-01校验方案(最适合本地开发场景,无需暴露本地服务到公网)
不需要配置端口映射、不需要公网开放80端口,申请证书时指定使用DNS校验方式即可:
执行命令后certbot会输出一条需要配置的TXT记录值,你到域名解析后台给certbot certonly --manual --preferred-challenges dns -d dev.{MyDomain}.com_acme-challenge.dev.{MyDomain}.com添加对应TXT记录,等记录生效后回车确认,CA校验到TXT记录匹配就会直接签发证书。 - 本地自签证书方案(纯离线开发场景)
如果只是本地调试HTTPS,不需要公网信任的证书,可以直接用本地自签证书工具生成受系统、浏览器信任的证书,完全不需要走Let's Encrypt的公网校验流程,配置更简单。
内容的提问来源于stack exchange,提问作者Vito Lipari
相关产品推荐
相关产品推荐

