CentOS 7 安装 Let's Encrypt 证书失败提示授权失败怎么办

文章导读
授权失败大多数情况下是因为 Let's Encrypt 的验证服务器无法通过公网访问你服务器的 80 端口,或者域名 DNS 解析尚未生效。
📋 目录
  1. 前置准备:CentOS 7 源切换
  2. 命令速用版
  3. 为什么会这样
  4. 分步处理
  5. 怎么验证是否生效
  6. 常见坑与风险
  7. 参考来源
A A

授权失败大多数情况下是因为 Let's Encrypt 的验证服务器无法通过公网访问你服务器的 80 端口,或者域名 DNS 解析尚未生效。

先说结论:优先检查防火墙和安全组是否放行 80 端口,确认域名解析指向当前服务器 IP,再重试申请命令。

  • 先确认:域名 A 记录是否已生效,服务器公网 IP 是否正确。
  • 先处理:配置防火墙放行 80 端口,检查 Web 服务器配置。
  • 再验证:使用 curl 测试外部访问,重新运行 certbot 命令。

前置准备:CentOS 7 源切换

CentOS 7 已于 2024 年 6 月 30 日停止维护,默认 yum 源已归档至 vault,直接安装 certbot 可能失败。请先执行以下命令切换源:

# 切换镜像地址到 vault.centos.org
sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/*.repo
# 启用 baseurl 禁用 metalink
sed -i 's/#baseurl/baseurl/g' /etc/yum.repos.d/*.repo
sed -i 's/metalink/#metalink/g' /etc/yum.repos.d/*.repo
# 清理缓存并重建
yum clean all && yum makecache
# 安装 certbot 及 nginx 插件
yum install -y certbot python3-certbot-nginx

命令速用版

# 检查本地 80 端口监听(使用 ss 替代 netstat)
ss -tulpn | grep :80
# 放行防火墙 80 端口(安全方式)
firewall-cmd `--permanent` `--add-service`=http
firewall-cmd `--reload`
# 测试外部能否访问
curl -I http://你的域名
# 重试申请(修复命令格式)
certbot `--nginx` -d 你的域名

为什么会这样

Let's Encrypt 颁发证书前需要验证你对域名的控制权。最常用的 HTTP-01 挑战方式要求验证服务器能从公网访问你服务器的 80 端口,并读取特定文件。如果防火墙拦截、安全组未放行、或者 Web 服务器没有正确配置该路径,验证就会失败。

分步处理

1. 检查 DNS 解析

在本地电脑使用 ping 命令,确认域名解析到的 IP 与你服务器公网 IP 一致。如果刚修改过 DNS,可能需要等待几分钟到几小时生效。

2. 检查服务器防火墙

CentOS 7 安装 Let's Encrypt 证书失败提示授权失败怎么办

CentOS 7 默认使用 firewalld。执行 systemctl status firewalld 查看状态。如果正在运行,建议添加规则而非直接关闭:

firewall-cmd `--permanent` `--add-service`=http
firewall-cmd `--reload`

若需临时调试,可执行 systemctl stop firewalld,测试完记得开启并配置规则。

3. 检查云厂商安全组

登录云服务器控制台,找到安全组或防火墙配置,确认入方向规则允许 TCP 80 端口来自 0.0.0.0/0。

4. 检查 Web 服务器配置

如果使用 Nginx,确保没有将 80 端口请求全部强制跳转到 HTTPS,否则验证请求可能被拦截。Certbot 通常会自动修改配置,但手动调整后需复查。

CentOS 7 安装 Let's Encrypt 证书失败提示授权失败怎么办

5. 查看 Certbot 日志

日志位于 /var/log/letsencrypt/letsencrypt.log,查看具体的 error 信息,确认是连接超时还是返回了错误状态码。

怎么验证是否生效

执行 curl -I http://你的域名/.well-known/acme-challenge/,如果返回 403 或 404 但连接成功,说明网络通了,只是文件路径问题;如果连接超时,说明网络不通。证书申请成功后,运行 certbot certificates 可以看到证书列表和有效期。

常见坑与风险

1. 频率限制:短时间内多次失败会导致 Let's Encrypt 暂时封锁该域名,需等待一小时后再试。

2. 系统停止维护风险:CentOS 7 已停止维护,存在长期安全风险。建议解决当前问题后,规划迁移至 AlmaLinux、Rocky Linux 或 CentOS Stream 等受支持系统。

3. IPv6 干扰:部分环境 IPv6 配置不当会导致验证尝试 IPv6 失败,可尝试在 certbot 命令中禁用 IPv6 或检查服务器 IPv6 监听。

参考来源

  • Let's Encrypt Validation Types: https://letsencrypt.org/docs/challenge-types/
  • Certbot Instructions: https://certbot.eff.org/
  • CentOS 7 End of Life: https://wiki.centos.org/Manuals/ReleaseNotes/CentOS7