zwl*_*619 4 https nginx 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.
Run Code Online (Sandbox Code Playgroud)
我可以访问example.com
和www.example.com
,并且在文档中有一条注释:https : //certbot.eff.org/#centosrhel7-nginx
注意:要使用webroot插件,必须将服务器配置为提供隐藏目录中的文件。如果/.well-known由Web服务器配置专门处理,则可能需要修改配置,以确保/.well-known/acme-challenge中的文件由Web服务器提供。
那是原因吗?如何修改配置?
小智 8
我遇到了这个问题。经过 4 个小时的艰苦调试后,我想通了。如果您的服务器同时支持 ipv4 和 ipv6,请确保您的服务器配置中有这两行:
listen 80;
listen [::]:80;
Run Code Online (Sandbox Code Playgroud)
第二行中的 [::]: 告诉它监听 ipv6。如果您错过了第二行,那么当您运行 certbot 时,LetsEncrypt 服务器将尝试通过 ipv6 访问您的服务器。但是由于您的应用程序 vhost 没有在 ipv6 上侦听,default
如果您启用了它,nginx 会将其定向到vhost 处理程序(因为该处理程序确实在 ipv6 上侦听)。由于default
处理程序无法提供所需的质询文件,因此将给出 404。
如果这不能解决您的问题:通常,在调试 certbot 时,请确保请求未被default
vhost(或任何其他 vhost)处理。您可以通过向默认 vhost 的配置文件添加日志指令,运行 certbot,然后检查您指定的日志文件以查看来自 Letsencrypt 的请求是否出现在其中来检查这一点。如果这不是问题,请检查您是否可以从浏览器访问质询文件。为此,您需要添加 certbot 添加到应用程序配置文件的位置指令。Certbot 会将其修改转储到其日志文件中的配置文件中。根据我的经验,它实际上并没有在/.well-known/acme-challenge
. 它实际上只是将该 url 的响应硬编码到配置文件中。因此,重新创建它,然后检查您是否可以从浏览器访问它。
这是一个非常普遍的问题,但是幸运的是应该很容易解决。让我们加密必须能够从.well-known目录读取,以验证您的服务器是否实际托管了您想要证书的域。
首先,请确保您在网站根目录中有一个.well-known目录。设置您的权限,以便从外部可以读取它;775应该是完美的。
然后,将此片段添加到Nginx中的虚拟主机文件中:
location ~ /.well-known {
allow all;
}
Run Code Online (Sandbox Code Playgroud)
这将允许对我们刚刚创建的.well-known目录的任何请求。现在,尝试再次请求证书,看看它是否有效。
归档时间: |
|
查看次数: |
4921 次 |
最近记录: |