我使用 Lets Encrypt 并得到错误: urn:acme:error:unauthorized ::客户端缺乏足够的授权 ::解析密钥授权文件时出错:密钥授权无效:令牌格式错误
我尝试:sudo service nginx stop 但得到错误:nginx 服务未加载
我使用 Lets Encrypt 并得到错误: urn:acme:error:unauthorized ::客户端缺乏足够的授权 ::解析密钥授权文件时出错:密钥授权无效:令牌格式错误
我尝试:sudo service nginx stop 但得到错误:nginx 服务未加载
所以我在这些东西上遇到了很多麻烦。基本上,该错误意味着 certbot 在测试您拥有该站点时无法找到它正在寻找的文件。这有很多潜在的原因,所以我会尝试总结一下,因为我在设置时遇到了大部分。如需更多参考资料,我发现github 自述文件比文档有用得多。
首先要注意的是,需要运行 nginx 服务才能使 acme 授权正常工作。看起来你说它不是,所以从旋转它开始。
sudo service nginx start
这样一来,这里的所有内容都基于您尝试为其创建证书的网站的文件位置。如果你不知道它在哪里,它会在相关的配置文件中,这在/etc/nginx
很大程度上取决于你的 NGINX 版本,但通常在/etc/nginx/nginx.conf
or/etc/nginx/sites-enabled/[site-name]
或/etc/nginx/conf/[something].conf
. 请注意,配置文件应该在下面列出(或者至少是它的目录),/etc/nginx/nginx.conf
以便您可以从那里开始。
这是一个重要的文件夹,因为这是certbot需要修改的文件夹。它需要在嵌套文件夹结构中创建一些文件,它尝试从中读取的 URL 返回这些文件中的数据。它尝试创建的文件夹将位于您在该文件夹下提供的根目录下:
/.well-known/acme-challenge
然后它会尝试创建一个名称晦涩的文件(我认为它是一个 GUID),并从 URL 中读取该文件。就像是:
http://example.com/.well-known/acme-challenge/abcdefgh12345678
这一点很重要,因为如果你的根目录配置不当,url会与文件夹不匹配,授权会失败。如果 certbot 在运行时没有文件夹的写入权限,则不会创建文件,因此授权将失败。我遇到了这两个问题。
此外,您可能已经注意到上述 URLhttp
不是https
. 这也很重要。我使用的是现有的加密工具,因此我必须配置 NGINX 以允许我查看端口下的 ./well-known 文件夹树,80
而不是443
同时将大部分数据保留在安全https
url 下。这两件事使得 NGINX 文件有点复杂,所以这里有一个示例配置供参考。
server {
listen 80;
server_name example.com;
location '/.well-known/acme-challenge' {
default_type "text/plain";
root /home/example;
}
location '/' {
return 301 https://$server_name$request_uri;
}
}
这允许移植80
与 certbot 挑战相关的所有内容,同时保持我网站其余部分的安全性。您可以修改目录权限以确保 certbot 有权写入文件,或者只是以 root 身份运行它:
sudo ./certbot-auto certonly
获得证书后,您还必须在配置中进行设置,但这超出了这个问题的范围,所以这里有一个链接。