acme.sh申请Let's Encrypt证书报Verify error无效响应如何解决
问题根因
acme.sh默认执行逻辑中会尝试修改.well-known/acme-challenge目录的所有者,以此匹配Web服务的运行用户,确保验证文件可被公网访问。当运行acme.sh的账户无对应目录的chown权限时,就会触发Operation not permitted报错,最终导致验证文件写入失败,证书申请流程中断。
解决方案
- 方案1:禁用acme.sh自动修改权限逻辑(最便捷)
只要运行acme.sh的账户本身对站点根目录有写入权限,可直接配置全局环境变量关闭默认的chown操作,配置永久生效:
acme.sh --set-default --env ACME_NO_CHOWN=1
配置完成后重新执行证书申请命令即可。
- 方案2:手动授权对应目录权限
如果你持有服务器sudo权限,可直接给运行acme.sh的账户开放站点目录下.well-known路径的所有权:
sudo chown -R 你的运行用户名:你的运行用户名 /home/path/to/example.com/.well-known
如果需要保留目录原有Web服务用户组属性,可改用权限叠加配置:
sudo chgrp -R 你的运行用户名 /home/path/to/example.com/.well-known sudo chmod -R 775 /home/path/to/example.com/.well-known
- 方案3:统一配置独立验证目录(适合多站点/权限管控严格场景)
单独创建一个通用的ACME验证文件存放目录,比如/home/yourname/acme-challenge,给当前运行账户开放完整读写权限后,在Web服务配置中添加全局规则,将所有站点的/.well-known/acme-challenge/*请求统一指向该目录。后续所有证书申请都指定该目录作为webroot即可,无需修改各个站点目录的权限配置。
配置完成后可手动在验证目录下创建测试文件,公网访问确认路径通、权限正常后再重新发起证书申请。
内容的提问来源于stack exchange,提问作者cssyphus
相关产品推荐
相关产品推荐

