使用Certbot时http-01验证挑战失败,提示Unauthorized错误如何解决?
解决Certbot http-01挑战失败(522错误)的方案
从错误信息里的522状态码和Cloudflare的IPv6地址2606:4700:3037::6815:57b4来看,问题核心是ACME验证节点通过Cloudflare访问你的源服务器时连接超时,以下是针对性的解决步骤:
1. 处理Cloudflare代理影响
如果你的域名正在使用Cloudflare代理(域名DNS记录旁显示橙色云朵图标):
- 临时关闭代理:将Cloudflare的代理模式切换为「DNS only」(灰色云朵),重新运行你的Certbot命令。验证完成后可再次开启代理。
- 保留代理的替代方案:改用
dns-01挑战方式,无需依赖HTTP访问,直接通过DNS TXT记录验证域名所有权。操作步骤如下:- 安装Cloudflare DNS插件:
sudo apt install certbot python3-certbot-dns-cloudflare - 在Cloudflare后台创建具备「Zone.DNS」权限的API令牌,将令牌写入配置文件
/etc/cloudflare.ini:dns_cloudflare_api_token = 你的Cloudflare API令牌 - 限制配置文件权限,避免泄露:
sudo chmod 600 /etc/cloudflare.ini - 运行Certbot完成验证:
certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare.ini -d registry.cuongncc.uk --agree-tos -m myemail@gmail.com --keep-until-expiring -v
- 安装Cloudflare DNS插件:
2. 排查IPv6连通性问题
错误中ACME节点使用IPv6地址发起请求,若服务器IPv6配置异常会导致超时:
- 检查域名解析:如果服务器未配置可用的IPv6,暂时删除域名的AAAA记录,仅保留指向服务器IPv4的A记录,再重新尝试验证。
- 验证IPv6端口开放:确保AWS安全组和服务器防火墙(如ufw)都开放了IPv6的80端口,允许
::/0地址段访问。
3. 确认AWS安全组配置
AWS服务器的安全组是网络访问的第一道防线,需检查:
- 入站规则:允许
0.0.0.0/0(IPv4)和::/0(IPv6)访问80端口。 - 出站规则:确保服务器能正常发起对外请求(默认规则通常已开放,若有自定义规则需确认)。
4. 手动测试端口连通性
在运行Certbot前,先验证80端口的外部访问性:
- 在服务器上启动临时HTTP服务:
python3 -m http.server 80 - 从外部设备或在线端口检测工具访问
http://registry.cuongncc.uk,确认能正常加载页面。若无法访问,说明端口仍存在连通性障碍,需重新排查防火墙和安全组配置。
内容的提问来源于stack exchange,提问作者CuongNCC
相关产品推荐
相关产品推荐

