You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Let's Encrypt Certbot申请证书遇404授权失败,但验证文件存在

问题描述

我尝试使用Let's Encrypt为网站申请SSL证书,执行命令:

docker run -it --rm -v "$PWD"/letsencrypt:/etc/letsencrypt certbot/certbot certonly --manual -d yourdomain.com

却收到错误提示:

Certbot failed to authenticate some domains (authenticator: manual). The Certificate Authority reported these problems:
  Domain: yourdomain.com
  Type:   unauthorized
  Detail: 2a01:7c*******f:feb8:1cae: Invalid response from http://yourdomain.com/.well-known/acme-challenge/dY_t**********PbmOrhH668mU: 404

我的Web服务器正常运行,无论在本机还是其他服务器使用curl访问该验证URL,都能成功获取对应内容:

$ curl http://yourdomain.com/.well-known/acme-challenge/dY_tTYlo88******OrhH668mU
dY_tTYlo88ZrcXCkM8uGL*******OMlOBp7dMgBs7d0epjyo

请问为何Certbot会出现验证失败的情况?


可能的原因及解决方案

1. IPv6解析与配置问题

错误信息中显示的是IPv6地址,说明Let's Encrypt验证服务器优先通过IPv6访问你的域名,但你的服务器IPv6链路存在问题:

  • 域名DNS配置了AAAA记录,但Web服务器未监听IPv6的80端口,或防火墙/安全组未开放IPv6的80端口
  • 你本地或测试服务器默认使用IPv4访问,所以curl能成功,但Let's Encrypt的IPv6请求无法获取到验证文件

解决方法:

  • 若无需IPv6,可临时删除域名的AAAA记录,重新执行Certbot命令
  • 若需保留IPv6,确保Web服务器配置监听IPv6端口(比如Nginx需添加listen [::]:80;),同时开放防火墙的IPv6 80端口规则

2. 验证文件的访问限制

虽然你能访问验证文件,但Let's Encrypt的验证请求可能被Web服务器的权限规则拦截:

  • 检查Web服务器访问日志,查看Let's Encrypt请求的具体状态和拦截原因
  • 确保.well-known/acme-challenge/目录及下属文件对所有访客可读,删除该路径下的htaccess、Nginx location限制等规则

3. CDN或反向代理缓存问题

若网站使用了CDN或反向代理,可能缓存了旧的404响应,或未同步刚放置的验证文件:

  • 临时禁用CDN缓存,或手动清除.well-known/acme-challenge/路径的缓存
  • 确认CDN回源配置正确,能直接拉取到你服务器上的验证文件

4. 网络层面的IPv6限制

服务器所在网络可能对IPv6入站/出站流量有拦截,导致Let's Encrypt的验证请求无法正常到达:

  • 使用支持IPv6的外部测试站点,验证你的验证URL是否能被IPv6访问
  • 联系服务器提供商确认IPv6网络链路是否正常

内容的提问来源于stack exchange,提问作者Jeanluca Scaljeri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:38:16