解决 Let’s Encrypt SSL 证书申请的 403 错误:完整的 Nginx 配置和排错教程

简介

作为一名多年的站长,我相信大家都经历过难题,无论小白还是有经验的老鸟,都会碰到一些基础问题。最近我的SSL证书也快到期了,我本来就懒之前用的Buypass,但是不给用了只能用其他的了。免费的也就Let’s Encrypt SSL,但是我刷脚本的时候遇到了一个 403 Forbidden 错误,虽然看似简单,但是我捣鼓了半天。这里分享本文解决方法,帮助大家解决在使用 acme.sh 工具申请 Let’s Encrypt SSL 证书403 错误

 

这个错误意味着 Let’s Encrypt 无法验证我们网站的 .well-known/acme-challenge/ 路径,因此证书申请失败。通过排查发现,主要原因是我的 Nginx 配置和目录权限存在问题,导致验证文件无法被正确访问。

Invalid status. Verification error details: Invalid response from https://.well-known/acme-challenge/{random-string}: 403

- shenqingzhengshu403wenti02

我总结的原因有3点

1、目录权限设置错误:由于 .well-known 目录权限设置不当,导致 Nginx 无法正常访问该目录,造成验证失败。

2、Nginx 中启用了强制的 HTTP -> HTTPS 重定向,那么 Let’s Encrypt 的验证请求可能会被重定向,导致验证失败。

解决

知道原因,解决起来就容易了,确保 .well-known 目录和其子目录 acme-challenge 具有正确的权限,这样 Nginx 才能访问并读取验证文件

# 创建 .well-known 和 acme-challenge 目录
mkdir -p /home/wwwroot/ivpsr.com/.well-known/acme-challenge

# 设置目录权限
chmod -R 755 /home/wwwroot/ivpsr.com/.well-known
chown -R www-data:www-data /home/wwwroot/ivpsr.com/.well-known

在nginx的配置文件里,找到server下面的 301重定向这行注释掉,再去跑脚本,跑完脚本成功后,再取消注释就可以,如果没有301重定向,这步你就直接忽略

        # location / {
        # return 301 https://$host$request_uri;
       #  }

测试并重启 Nginx,我这里用的是一键lnmp,所以命令会有所不同

nginx -t  # 测试配置是否正确
lnmp restart  # 重启 Nginx 服务

重新运行 acme.sh

acme.sh --issue -d ivpsr.com --webroot /home/wwwroot/ivpsr.com/ --force
THE END