Debian8环境Certbot申请SSL证书触发gaierror(-2)报错如何解决
错误原因
ConnectionError: ('Connection aborted.', gaierror(-2, 'Name or service not known'))属于DNS解析失败类错误,核心是你的服务器无法正常解析请求的域名,可能是本地DNS配置错误、待申请证书的域名解析配置错误、老系统Certbot版本不兼容、网络出站限制这几类原因导致。
对应解决方案
1. 修复服务器本地DNS配置
- 先测试公网域名解析是否正常,执行命令:
ping acme-v02.api.letsencrypt.org
如果返回「未知的域名/Name or service not known」,说明本地DNS配置失效。 - 编辑DNS配置文件
/etc/resolv.conf,新增公共DNS地址:
nameserver 8.8.8.8 nameserver 1.1.1.1
保存文件后重新执行上述ping命令,确认解析正常。
2. 校验待签发证书的域名解析
- 确认你执行Certbot命令时
-d参数后绑定的域名,已经在域名服务商后台配置了A记录,指向当前服务器的公网IP,无拼写错误。 - 在服务器上执行命令校验域名解析结果:
nslookup 你的实际域名
如果返回的IP和服务器公网IP不一致,先修改域名解析记录,等待解析生效后再重新执行Certbot命令。
你执行的示例命令中用的是
example.com和www.example.com,必须替换为你实际持有的、已经完成解析配置的域名,否则必然会报错。
3. 适配Debian 8旧系统兼容问题
Debian 8属于停止维护的旧版本,默认源安装的Certbot版本过低,已经不兼容Let's Encrypt当前的ACME v2接口,建议替换为兼容性更好的acme.sh工具签发证书:
- 卸载原有Certbot:
apt remove certbot -y - 安装acme.sh:
curl https://get.acme.sh | sh - 用webroot模式签发证书:
acme.sh --issue -d 你的域名 -d www.你的域名 --webroot /var/www/html - 签发完成后可配置自动部署到Nginx配置的证书路径,工具默认会自动配置定期续期任务。
4. 排查网络出站限制
如果上述配置都正常还是报错,检查服务器的防火墙、云服务商安全组是否放行出站443端口,有没有配置错误的代理规则,执行以下命令测试ACME接口连通性:curl -v https://acme-v02.api.letsencrypt.org/directory
如果无法正常返回JSON数据,调整出站访问规则即可。
报错截图

内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

