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

AWS EC2环境运行Certbot申请SSL证书域名认证失败求助

报错根因

你收到的unauthorized报错核心原因是Let's Encrypt的ACME校验请求访问http://matthieuxroger.com/.well-known/acme-challenge/xxx路径时,没有拿到Certbot生成的校验文件,反而返回了你站点的首页HTML内容,常见触发原因如下:

  • 使用--standalone模式时,80端口已经被你运行的Node.js服务占用,Certbot无法启动临时的80端口监听服务处理校验请求,所有80端口请求都被转发到Node服务返回首页
  • 使用--webroot模式时,要么是你指定的webroot路径和Node服务的静态资源目录不匹配,要么是Node服务没有配置对应.well-known/acme-challenge路径的静态资源访问规则,导致无法返回校验文件
  • 你当前的场景已经能返回站点内容,所以可以排除AWS EC2安全组80端口未开放、域名解析错误的问题
解决方案

方案1:临时停服务申请(适合快速测试)

  • 停止占用80端口的Node.js服务,如果你用pm2管理进程可以执行:pm2 stop <你的Node服务名称>,如果是前台运行直接终止进程即可
  • 重新执行standalone模式申请命令:sudo certbot certonly --standalone -d matthieuxroger.com
  • 证书申请完成后再重启Node.js服务即可,缺点是后续证书自动续期时仍需要临时停服务

方案2:配置Node服务适配webroot模式(无需停服务,推荐)

  • 提前创建好校验文件的存放目录,例如:sudo mkdir -p /var/www/matthieuxroger/.well-known/acme-challenge
  • 在你的Node.js服务代码中添加静态资源路由规则,以Express框架为例:
    app.use('/.well-known/acme-challenge', express.static('/var/www/matthieuxroger/.well-known/acme-challenge'))
    
  • 重启Node.js服务让配置生效
  • 执行webroot模式申请命令:sudo certbot certonly --webroot -w /var/www/matthieuxroger -d matthieuxroger.com
  • 该方案后续Certbot自动续期无需停服务,适配生产环境使用

方案3:新增Nginx反向代理(适合长期运维,更推荐)

  • 安装Nginx:sudo apt update && sudo apt install -y nginx
  • 修改Node.js服务监听端口为非80端口(例如3000端口),配置Nginx 80端口反向代理到Node服务,同时配置校验路径的静态规则
  • 直接使用Certbot的Nginx插件一键申请证书并自动配置SSL:sudo certbot --nginx -d matthieuxroger.com
  • 该方案不需要修改Node服务的校验路由,Certbot会自动处理证书配置和自动续期逻辑,还能实现静态资源加速、多站点部署等能力

申请完成的证书默认存放在/etc/letsencrypt/live/matthieuxroger.com/目录下,其中fullchain.pem为证书链文件,privkey.pem为私钥文件,按需配置到你的服务中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:06:01