acme.sh 版本过旧、.well-known 路径被拦截、宝塔计划任务未更新、Web 服务未重载是导致续签失败的四大主因,需依次升级 acme.sh、修复目录权限与 Nginx 配置、更新计划任务路径及 --reloadcmd 参数。

acme.sh 版本过旧导致续签失败
acme.sh 2.8.7 之前版本存在对 Let’s Encrypt ACME v2 接口兼容性问题,尤其在 2024 年后频繁出现 urn:ietf:params:acme:error:unauthorized 或 Invalid response from http://example.com/.well-known/acme-challenge/ 错误。宝塔默认安装的 acme.sh 往往停留在 2.7.x 或更老版本,不会自动升级。
执行以下命令强制更新到最新稳定版:
curl https://get.acme.sh | sh -s email=your@email.com ~/.acme.sh/acme.sh --upgrade
注意:email 参数仅用于首次注册账户,后续升级可省略;升级后需重新加载环境变量或新开终端,确保 acme.sh 命令指向新路径(通常为 ~/.acme.sh/acme.sh)。
网站根目录下 .well-known/acme-challenge 权限或路径被拦截
acme.sh 使用 HTTP-01 验证时,会尝试在网站根目录写入临时验证文件,但宝塔默认启用的「防跨站攻击」或用户手动配置的 Nginx/Apache 规则常会拦截 .well-known 路径,或因目录权限不足导致写入失败。
检查并修复要点:
- 确认网站根目录(如
/www/wwwroot/example.com)对运行 acme.sh 的用户(通常是www或当前登录用户)有写权限:ls -ld /www/wwwroot/example.com,必要时执行chown -R www:www /www/wwwroot/example.com - 检查 Nginx 配置中是否错误地屏蔽了
.well-known:搜索location ~ /\.well-known或deny all相关行,删除或注释掉;标准 HTTP-01 验证需要该路径可公开访问且不跳转 - 若使用宝塔「网站 > 设置 > 反向代理」或「伪静态」,确认没有规则重写或拦截
/.well-known/acme-challenge/开头的请求
宝塔计划任务中 acme.sh 续签命令未同步更新
即使本地 acme.sh 已升级,宝塔后台「计划任务」里自动生成的 SSL 续签任务仍调用旧版脚本路径或参数格式,常见表现为日志中反复出现 command not found: acme.sh 或 --force --renew 被忽略。
手动修正步骤:
- 进入「宝塔面板 > 计划任务」,找到对应域名的 SSL 自动续签任务
- 编辑任务内容,将原命令(如
acme.sh --renew -d example.com --force)替换为绝对路径调用:/root/.acme.sh/acme.sh --renew -d example.com --force --debug - 确保「执行周期」设置合理(建议设为「每天 03:00」),并勾选「记录日志」以便排查
- 保存后立即点击「执行一次」,观察日志输出是否含
Success和新证书有效期
证书续签后 Nginx/Apache 未重载配置
acme.sh 成功生成新证书后,若未触发 Web 服务重载,站点仍将使用旧证书,浏览器提示“已过期”——这不是续签失败,而是服务未生效。
宝塔默认会在 acme.sh 命令末尾追加 --reloadcmd 参数,但部分老版本或手动添加的任务会遗漏。务必确认计划任务命令中包含:
--reloadcmd "service nginx reload"
或针对 Apache:
--reloadcmd "service httpd reload"
注意:service 在较新系统中可能需改为 systemctl,例如 --reloadcmd "systemctl reload nginx";同时确保该命令在当前用户环境下有执行权限(宝塔计划任务默认以 root 运行,一般无权限问题)。
验证方式:续签成功后,执行 nginx -t && systemctl reload nginx 手动触发一次,再用 openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates 检查生效时间。
最易被忽略的是:acme.sh 更新、目录权限、Nginx 配置三者必须全部就位,缺一不可;哪怕只改了版本,但 .well-known 仍被 deny,照样失败。


















