8

我使用 Lets Encrypt 并得到错误: urn:acme:error:unauthorized ::客户端缺乏足够的授权 ::解析密钥授权文件时出错:密钥授权无效:令牌格式错误

我尝试:sudo service nginx stop 但得到错误:nginx 服务未加载

4

1 回答 1

7

所以我在这些东西上遇到了很多麻烦。基本上,该错误意味着 certbot 在测试您拥有该站点时无法找到它正在寻找的文件。这有很多潜在的原因,所以我会尝试总结一下,因为我在设置时遇到了大部分。如需更多参考资料,我发现github 自述文件比文档有用得多。

首先要注意的是,需要运行 nginx 服务才能使 acme 授权正常工作。看起来你说它不是,所以从旋转它开始。

sudo service nginx start

这样一来,这里的所有内容都基于您尝试为其创建证书的网站的文件位置。如果你不知道它在哪里,它会在相关的配置文件中,这在/etc/nginx很大程度上取决于你的 NGINX 版本,但通常在/etc/nginx/nginx.confor/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同时将大部分数据保留在安全httpsurl 下。这两件事使得 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

获得证书后,您还必须在配置中进行设置,但这超出了这个问题的范围,所以这里有一个链接

于 2016-06-27T18:22:25.663 回答