使用certbot应用Let的加密证书:授权程序失败

时间:2017-02-16 08:56:42

标签: nginx https lets-encrypt

我使用certbot申请Let's Encrypt证书, 我的服务器是centos 7.2和nginx 1.11.9。 这意味着什么?

[root@test ~]# certbot certonly --webroot -w /var/www/www.example.com -d example.com -d www.example.com

Failed authorization procedure. example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://example.com/.well-known/acme-ch
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>", www.example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://www.example.com/.well-known/acme-challenge/k
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>"

IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to example@example.com.
 - The following errors were reported by the server:

   Domain: example.com
   Type:   unauthorized
   Detail: Invalid response from
   http://example.com/.well-known/acme-challenge/wGNv57IGJjHQ9wyzzALktpNaPzfnTtN3m7u3QuO4p40:
   "<html>
   <head><title>404 Not Found</title></head>
   <body bgcolor="white">
   <center><h1>404 Not Found</h1></center>
   <hr><center>"

   Domain: www.example.com
   Type:   unauthorized
   Detail: Invalid response from
   http://www.example.com/.well-known/acme-challenge/kFJ0CSuKOdgcT2xmciB4GGNCcnUPoIbpQmA9jOII_Bk:
   "<html>
   <head><title>404 Not Found</title></head>
   <body bgcolor="white">
   <center><h1>404 Not Found</h1></center>
   <hr><center>"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A record(s) for that domain
   contain(s) the right IP address.
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

我可以访问example.comwww.example.com,文档中有一条说明:https://certbot.eff.org/#centosrhel7-nginx

  

注意:   要使用webroot插件,必须将服务器配置为从隐藏目录提供文件。如果您的网络服务器配置特别处理/.well-known,您可能需要修改配置以确保网络服务器为/.well-known/acme-challenge内的文件提供服务。

这是原因吗? 如何修改配置?

2 个答案:

答案 0 :(得分:4)

这是一个非常常见的问题,但幸运的是应该是一个简单的解决方法。我们的加密必须能够从.well已知目录中读取,以验证您的服务器是否实际托管了您想要证书的域。

首先,确保您的网站根目录中有.well已知目录。设置您的权限,以便从外部可读; 775应该是完美的。

然后,将此代码段添加到Nginx中的虚拟主机文件中:

    location ~ /.well-known {
            allow all;
    }

这将允许对我们刚刚创建的.well知道目录的任何请求。现在,再次尝试申请证书,看看它是否有效。

答案 1 :(得分:2)

我遇到了这个问题。经过4个小时的艰苦调试,我弄清楚了。如果您的服务器同时支持ipv4和ipv6,请确保服务器配置中同时包含以下两行:

listen 80;
listen [::]:80;

第二行中的[::]:告诉它在ipv6上侦听。如果您缺少第二行,将会发生的情况是,当您运行certbot时,LetsEncrypt服务器将尝试通过ipv6访问您的服务器。但是,由于您的应用程序虚拟主机未在ipv6上进行监听,因此,如果启用了该功能,nginx会将其定向到default虚拟主机处理程序(因为该处理程序确实在ipv6上进行监听)。由于default处理程序无法提供所需的质询文件,因此它将提供404。


如果这不能解决您的问题:通常,在调试certbot时,请确保default虚拟主机(或任何其他虚拟主机)未处理该请求。您可以通过adding a log directive来检查默认虚拟主机的配置文件,并运行certbot,然后检查您指定的日志文件,以查看Letsencrypt的请求是否出现在其中。如果这不是问题,请检查是否可以从浏览器访问质询文件。为此,您需要将certbot添加到应用程序配置文件中的位置指令添加。 Certbot会将其修改内容转储到其日志文件中的配置文件中。以我的经验,它实际上并没有在/.well-known/acme-challenge中创建挑战文件。实际上,它只是将该URL的响应硬编码到配置文件中。因此,请重新创建它,然后检查是否可以从浏览器访问它。