欢迎光临
我们一直在努力

Let’s Encrypt 证书老是续期失败,到底是因为 DNS 没解析对还是 IP 被封了?

对于个人站长来说,Let’s Encrypt 提供了便捷免费的 HTTPS 证书。然而,证书在续期时如果报错,往往让人摸不着头脑。最常见的两大疑凶便是:域名没有正确解析到新 IP,或是服务器的 80 端口被防火墙或网络服务商阻挡。

本文将聚焦于 Let’s Encrypt 最常用的 HTTP-01 验证方式,提供一套诊断流程,帮你准确找出失败的原因。


步骤一:理解 HTTP-01 验证原理

Let’s Encrypt 机构(ACME 服务器)需要通过公网访问您的域名。如果您的域名是 example.com,ACME 服务器会尝试访问 http://example.com/.well-known/acme-challenge/TOKEN。如果服务器能响应这个挑战文件,则验证成功。

续期失败,意味着 ACME 服务器无法成功访问到这个特定的 URL。

步骤二:检查 DNS 解析是否正确

如果您的 VPS IP 地址发生了变化,但 DNS 记录未更新,ACME 服务器就会尝试连接到一个错误的 IP,导致验证失败。

1. 使用 dig 或在线工具检查 A 记录

登录到您的 VPS 或使用本地终端,检查您的域名是否指向正确的公网 IP。请注意,ACME 服务器是从全球不同地理位置进行连接的,所以最好使用公共 DNS 或多地点查询工具。

# 检查主域名 A 记录
dig +short example.com A

# 检查 www 子域名 A 记录 (如果使用了 www)
dig +short www.example.com A

诊断结果:

  • 如果返回 IP 错误: 问题在于 DNS。请立即到域名服务商后台修改 A 记录。注意 DNS 缓存(TTL)可能需要几分钟到几小时才能全球生效。
  • 如果返回 IP 正确: 解析没有问题,问题可能出在服务器端(防火墙或 Web 服务)。

步骤三:检查服务器的 IP 连通性与防火墙

即使 DNS 指向正确,如果您的服务器禁止了 80 端口的流量,ACME 服务器依然无法完成挑战。

1. 确认 80 端口是否开放

这是最常见的续期失败原因之一。检查本地防火墙(如 ufwiptables)。

UFW 防火墙检查(Ubuntu/Debian 常用)

sudo ufw status verbose

# 如果 80 端口没有开放,请执行以下命令开放
sudo ufw allow 80/tcp

IPtables 防火墙检查(CentOS/RHEL 常用)

sudo iptables -L -n | grep 80

# 如果没有规则允许80端口,请手动添加或通过firewalld服务管理

注意: 如果您的 VPS 位于阿里云、腾讯云等公有云,请务必检查云服务商的安全组(Security Group)配置,确保入站规则中允许 TCP 80 端口的流量。

2. 确认 Web 服务是否在运行

负责响应 ACME 挑战的 Web 服务器(Nginx 或 Apache)必须正常运行并监听 80 端口。

# 检查 Web 服务状态 (以 Nginx 为例)
sudo systemctl status nginx

# 确认80端口被监听
sudo netstat -tuln | grep 80

如果 Web 服务器未运行或 80 端口没有监听,Let’s Encrypt 将无法放置和读取挑战文件。

3. 本地模拟 ACME 访问

当您运行 Certbot 尝试续期时,它会在特定目录下放置一个挑战文件。在续期失败后,您可以手动尝试通过本地服务器访问该路径,确认 Web 服务器是否配置正确。

例如,如果 Certbot 尝试访问 http://example.com/.well-known/acme-challenge/testfile,您可以在本地放置一个文件,并尝试通过 curl 访问:

# (假设您已在挑战目录创建了临时文件 'test.txt')
curl -I http://example.com/.well-known/acme-challenge/test.txt

如果 curl 返回 200 OK,说明 Web 服务器本身是正常响应的。如果返回连接超时或拒绝,那基本确定是防火墙或安全组问题。

总结与快速修复

续期失败现象 主要诊断方向 修复措施
Certbot 日志显示 ‘No A record found’ 或 ‘Name not resolved’ DNS 解析错误 更新域名 A 记录,等待 TTL 生效。
Certbot 日志显示 ‘Connection refused’ 或 ‘Timeout’ IP/防火墙阻塞 检查 VPS 本地防火墙和云服务商安全组,确保 TCP 80 端口对公网开放。
Certbot 日志显示 ‘Error 404 Not Found’ Web 服务配置错误 检查 Nginx/Apache 配置,确保 .well-known/acme-challenge 路径可以被正确处理,且服务在运行。
【本站文章皆为原创,未经允许不得转载】:汤不热吧 » Let’s Encrypt 证书老是续期失败,到底是因为 DNS 没解析对还是 IP 被封了?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址