让我们加密错误“urn:acme:error:unauthorized”

时间:2016-04-12 14:10:53

标签: https ssl-certificate lets-encrypt

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

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

1 个答案:

答案 0 :(得分:7)

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

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

sudo service nginx start

随着这一切,这里的一切都基于您尝试为其创建证书的网站的文件位置。如果您不知道它在哪里,它将位于/etc/nginx下的相关配置文件中,这主要取决于您的NGINX版本,但通常位于/etc/nginx/nginx.conf/etc/nginx/sites-enabled/[site-name]或{ {1}}。请注意,应在/etc/nginx/conf/[something].conf下列出配置文件(或至少是它的目录),以便您可以从那里开始。

这是一个重要的文件夹,因为这是certbot需要修改的文件夹。它需要在嵌套文件夹结构中创建一些文件,它尝试从中读取的URL返回这些文件中的数据。它尝试创建的文件夹将位于您在文件夹下的根目录下:

/etc/nginx/nginx.conf

然后它将尝试创建一个名称模糊的文件(我认为它是一个GUID),然后从URL中读取该文件。类似的东西:

/.well-known/acme-challenge

这很重要,因为如果您的根目录配置不当,则该网址与该文件夹不匹配,授权将失败。如果certbot在运行时没有对文件夹的写权限,则不会创建该文件,因此授权将失败。我遇到了这两个问题。

此外,您可能已注意到上述网址为http://example.com/.well-known/acme-challenge/abcdefgh12345678而非http。这也很重要。我使用的是现有的加密工具,因此我必须配置NGINX以允许我在端口https而不是80下查看./well-known文件夹树,同时仍保留我的大部分数据安全443网址。这两件事使得一个有点复杂的NGINX文件,所以这里是一个参考的示例配置。

https

这允许端口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; } } 用于与certbot挑战相关的所有内容,同时保留我网站其余部分的安全性。您可以修改目录权限以确保certbot有权写入文件,或者只是以root身份运行它:

80

获得证书后,您还必须在配置中进行设置,但这超出了此问题的范围,因此here's a link