授权失败大多数情况下是因为 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 默认使用 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 通常会自动修改配置,但手动调整后需复查。
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
原文链接:https://www.zjcp.cc/ask/11699.html
