我使用Lets Encrypt并获取错误: urn:acme:error:unauthorized ::客户端缺少足够的授权::解析密钥授权文件时出错:密钥授权无效:格式错误的令牌
我尝试: sudo service nginx stop 但得到错误: nginx服务未加载
答案 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。