Certbot未创建acme-challenge文件夹

28

几个月前我使用旧版的 Let's encrypt 客户端创建了有效证书,我正在使用 nginx 服务器。

Certbot 正在创建 .well-known 文件夹,但未创建 acme-challenge 文件夹。

现在我尝试通过 ~/certbot-auto certonly --webroot -w /var/www/webroot -d domain.com -d www.domain.com -d git.domain.com 创建新证书,但总是出现如下错误:

IMPORTANT NOTES:
   - The following errors were reported by the server:

   Domain: git.domain.com
   Type:   unauthorized
   Detail: Invalid response from
   http://git.domain.com/.well-known/acme-challenge/ZLsZwCsBU5LQn6mnzDBaD6MHHlhV3FP7ozenxaw4fow:
   "<.!DOCTYPE html>
   <.html lang='en'>
   <.head prefix='og: http://ogp.me/ns#'>
   <.meta charset='utf-8'>
   <.meta content='IE=edge' http-equiv"

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

(当然,HTML标签内部的点并不存在)

我已经寻找解决方案,但还没有找到一个。 有人知道为什么certbot没有创建文件夹吗?

先行致谢!

3个回答

19

问题出在nginx的配置上。 我用最简单的配置文件替换了我的长配置文件:

server {
    listen 80;
    server_name domain.com www.domain.com git.domain.com;
    root /var/www/domain/;
}

然后我能够发布新的证书。

我的长配置文件问题在于(据我所知)我有这些行:

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

但是它们应该是:

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

现在续订也可以了。


25
值得一提的是,Certbot在尝试签发证书后会清除“.well-known”目录。因此,如果您认为问题在于文件生成而不是文件服务,那么请放心,这不是问题所在。当权限错误时,您会收到不同的错误提示。 - DfKimera
请注意,在这种情况下,所有子域名都使用相同的根目录。如果使用多个根目录,则为每个根目录创建一个服务器是一种解决方案(也许不是最好的,但它可以工作)。 - aluriak
1
这些解决方案对我没有用。我有“位置/.well-known {..允许所有; }”。Strace显示,当手动创建acme-challenge目录并启动certbot时,certbot会删除该目录。然后它无法打开挑战文件。 - rhoerbe
1
我认为这里的正则表达式应该匹配。〜/ .well-known 匹配 /.well-known/acme-challege/,对吗? - Michael Campbell
@DfKimera如果我删除它,它会清除它,但在下一次运行时它会重新创建吗? - mckenzm

7
我是一名有用的助手,可以为您翻译文本。以下是需要翻译的内容:

我曾经遇到过类似的问题。我的问题在于,我有这个规则:

 location ~ /\. {
    access_log off;
    log_not_found off;
    deny all;
 }

这些行取消了对以 "."(点)开头的任何目录的访问权限。

3
我也遇到了这个问题(Wordpress在Nginx上的默认设置),但这是一个有价值的规则,只需将其放置在 location ~ /.well-known 规则之后即可。 - Jason Elkin

1

由于某种奇怪的原因(我认为certbot脚本在某种程度上发生了变化),我无论如何都无法更新证书。经过近4小时的研究,我找到了这个帖子,最终帮助了我:

https://community.letsencrypt.org/t/solved-invalid-response-403-forbidden/64170/13

我希望能对其他人有所帮助。
关键是在Apache配置中添加以下内容:
DocumentRoot /var/lib/letsencrypt/http_challenges
    <Directory /var/lib/letsencrypt/http_challenges>
            Allow from All
    </Directory>

希望它能对其他人有用!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接