我使用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.com
和www.example.com
,文档中有一条说明:https://certbot.eff.org/#centosrhel7-nginx
注意: 要使用webroot插件,必须将服务器配置为从隐藏目录提供文件。如果您的网络服务器配置特别处理/.well-known,您可能需要修改配置以确保网络服务器为/.well-known/acme-challenge内的文件提供服务。
这是原因吗? 如何修改配置?
答案 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的响应硬编码到配置文件中。因此,请重新创建它,然后检查是否可以从浏览器访问它。