Certbot获取SSL遇.well-known/acme-challenge 404错误(Apache环境求助)
修复Apache下Certbot SSL验证404错误的步骤
1. 确认Webroot路径的准确性
你用的-w projectroot参数必须完全匹配Apache站点配置里的DocumentRoot路径,不能随便填项目根目录(比如包含配置文件、.git的目录)。
查看Apache站点配置确认路径:
# Ubuntu/Debian系统 cat /etc/apache2/sites-available/xxxxxx.com.conf # CentOS/RHEL系统 cat /etc/httpd/conf.d/xxxxxx.com.conf
找到DocumentRoot字段,把certbot命令里的-w参数值替换成这个路径。
2. 手动验证ACME挑战路径的可访问性
先手动创建测试文件,排查Apache能不能正确返回该路径的内容:
# 进入正确的DocumentRoot路径 cd /path/to/your/DocumentRoot # 创建ACME挑战所需的目录结构 mkdir -p .well-known/acme-challenge # 创建测试文件 echo "test-verify" > .well-known/acme-challenge/test-file # 设置权限,确保Apache运行用户可读取 chown -R www-data:www-data .well-known # Ubuntu/Debian # CentOS/RHEL请用apache用户 chown -R apache:apache .well-known
完成后用curl或浏览器访问http://xxxxxx.com/.well-known/acme-challenge/test-file,能看到test-verify就说明路径正常;如果还是返回404,检查以下配置:
- 确认站点配置的
ServerName/ServerAlias包含你的目标域名xxxxxx.com - 要是站点有HTTP转HTTPS的重定向规则,得添加ACME路径的例外:
在Apache站点配置里加:
RewriteEngine On # 跳过ACME挑战路径的HTTPS重定向 RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
修改后重启Apache:
# Ubuntu/Debian systemctl restart apache2 # CentOS/RHEL systemctl restart httpd
3. 验证DNS记录与服务器IP匹配
检查域名的A/AAAA记录是不是指向服务器公网IP:
# 检查IPv4记录 dig xxxxxx.com A +short # 检查IPv6记录 dig xxxxxx.com AAAA +short
要是返回的IP和服务器公网IP不符,修改DNS记录后等5-10分钟让缓存生效。
4. 检查防火墙/安全组设置
确保服务器的80端口(HTTP)对外开放,ACME验证必须通过80端口完成,要是防火墙或云服务商安全组禁用了80端口,直接会导致验证失败。
.well-known文件夹的生成位置
用certbot run -a webroot模式时,.well-known文件夹会自动生成在你-w参数指定的Webroot路径下(也就是正确的DocumentRoot目录)。如果自动创建失败,可按照步骤2手动创建目录并设置权限。
内容的提问来源于stack exchange,提问作者Supun Madhushanka
相关产品推荐
相关产品推荐

