Certbot 未创建 acme-challenge 文件夹

Posted

技术标签:

【中文标题】Certbot 未创建 acme-challenge 文件夹【英文标题】:Certbot not creating acme-challenge folder 【发布时间】:2016-11-17 20:59:37 【问题描述】:

几个月前,我在工作让我们加密证书(使用旧的letsencrypt 客户端)。 我使用的服务器是 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 不创建文件夹吗?

提前致谢!

【问题讨论】:

【参考方案1】:

问题出在 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;

现在更新也可以了。

【讨论】:

值得一提的是,Certbot 尝试发出后会清空.well-known 目录。因此,如果您认为问题出在文件生成而不是文件服务上,请放心,事实并非如此。出现权限错误时得到的错误是不同的。 请注意,在这种情况下,所有子域都使用相同的根目录。如果使用多个根,则为每个根创建一个服务器是一种解决方案(可能不是最好的,但它有效)。 这些解决方案对我不起作用。我有“location /.well-known .. allow all; 。Strace 显示 certbot 在启动 certbot 之前手动创建 acme-challenge 目录时会删除它。然后它无法打开挑战文件。 我认为这里的正则表达式应该匹配。 ~ /.well-known 匹配 /.well-known/acme-challege/,不是吗?【参考方案2】:

我遇到了类似的问题。我的问题是,我有这个规则:

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

这些行取消对任何以“。”开头的目录的访问。 (点)

【讨论】:

我也遇到过这个问题(Nginx 上 Wordpress 的默认设置),但这是一条有价值的规则,所以只需将其放在 location ~ /.well-known 规则之后【参考方案3】:

出于某种奇怪的原因(我认为 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>

希望它适用于其他人!

【讨论】:

以上是关于Certbot 未创建 acme-challenge 文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何构建 Node Server 的镜像?

来自 Apache http /.well-known/acme-challenge 的无效响应

如何使用 certbot 为没有域名的网站创建 SSL? [复制]

sh 使用CertBot(nginx)创建证书

Certbot 没有创建众所周知的文件夹(它怎么知道在哪里这样做?)

acme.sh 脚本因验证错误而失败:来自 https://example.com/.well-known/acme-challenge/etc 的响应无效。请添加“--debug”或“--log”