AWS Elastic Beanstalk Linux 2023单实例Certbot域名认证失败求助
当在AWS Elastic Beanstalk单实例环境(Linux 2023系统、.NET Core运行时)通过Certbot的webroot插件申请SSL证书时,出现http-01验证失败,目标路径返回404错误,具体错误如下:
等待验证...
example.com域名验证失败
www.example.com域名验证失败
example.com的http-01 challenge
www.example.com的http-01 challengeCertbot未能完成部分域名的认证(authenticator: webroot)。证书颁发机构报告了以下问题:
域名:example.com
类型:unauthorized
详情:44.223.223.199: 从http://example.com/.well-known/acme-challenge/fS2LXXl8MNia09szGIDTQx-pBi-oX6WFR7to1_vyTx4返回无效响应:404域名:www.example.com
类型:unauthorized
详情:44.223.223.199: 从http://www.example.com/.well-known/acme-challenge/-3d4YoMIACMLV_pZ9EAJzYK5iznPWuYQA7SelMnV1a0返回无效响应:404
排查步骤及解决方法
1. 确认webroot路径是否正确
Linux 2023平台上的.NET Core应用,默认静态文件托管目录是/var/app/current/wwwroot。执行certbot certonly时必须指定正确的webroot路径:
sudo certbot certonly --webroot -w /var/app/current/wwwroot -d example.com -d www.example.com
如果你的应用没使用wwwroot作为静态文件根目录,替换为实际路径即可。
2. 修复.well-known目录权限
Certbot需要在webroot下创建验证文件,确保目录权限允许web服务器读取:
# 手动创建目录并设置权限 sudo mkdir -p /var/app/current/wwwroot/.well-known/acme-challenge sudo chown webapp:webapp /var/app/current/wwwroot/.well-known -R sudo chmod 755 /var/app/current/wwwroot/.well-known -R
3. 调整Nginx配置允许访问.well-known
Elastic Beanstalk默认Nginx配置可能拦截该路径,需修改配置:
- 进入Nginx配置目录:
cd /etc/nginx/conf.d - 打开应用配置文件(如
elasticbeanstalk/nginx.conf),添加以下规则:
location /.well-known/acme-challenge/ { root /var/app/current/wwwroot; allow all; }
- 重启Nginx生效:
sudo systemctl restart nginx
4. 检查网络连通性
- 确认域名已正确解析到实例公网IP(44.223.223.199)
- 检查Elastic Beanstalk安全组是否开放80端口(HTTP),允许外部访问
- 临时关闭实例防火墙(若有):
sudo systemctl stop firewalld,验证后按需开启
5. 测试静态文件访问
在/var/app/current/wwwroot/.well-known/acme-challenge/下创建测试文件test.txt,写入任意内容,然后访问http://example.com/.well-known/acme-challenge/test.txt。如果能正常返回内容,说明路径和权限没问题;若仍404,继续排查web服务器配置。
内容的提问来源于stack exchange,提问作者Primico

