Certbot 从哪里提供 HTTP-01 挑战?

Certbot 从哪里提供 HTTP-01 挑战?

我正在诊断一些使用 Certbot 续订的 Ubuntu 14 LTS / Apache 2.4 机器的一个奇怪问题。是的,我知道 Ubuntu 14 LTS 很快就会停产;这些是重建列表中的一些落后机器。

本质上,Certbot 在这些机器上运行良好已有一段时间,续订通过 cron 作业处理。从 10 月到现在的某个时间,在 HTTP-01 挑战期间,续订失败并出现 403:

Detail: Invalid response from
http://example.com/.well-known/acme-challenge/asdkjhfaklsjdfhalksdjfhkljasdfh:
"<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML
2.0//EN\">\n<html><head>\n<title>403
Forbidden</title>\n</head><body>\n<h1>Forbidden</h1>\n<p"

To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.

我已经将问题诊断为由于 Apache 配置(Require all denied/ 上的 a)导致 .well-known 目录在挑战期间被拒绝。

作为权宜之计,我正在通过临时的Require all allowed/ 手动更新证书,但想正确地解决这个问题。

那么,Certbot 实际上从哪里提供挑战呢?我尝试了

<Directory /var/lib/letsencrypt/http_challenges>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

但似乎没有效果。由于速率限制,猜测和检查的速度很慢。

答案1

请求由 /var/lib/letsencrypt/http_challenges 提供。我认为这与certbot 0.28.0变更和 EOLTLS-SNI-01

在我的 Ubuntu 14.04 / Apache 2.4.7 机器上,需要两样东西。

我必须移除根锁定。我编辑了 /etc/apache2/conf-enabled/security.conf,同时还添加了挑战的服务来源。

<Directory />
   AllowOverride None
   Require all granted
</Directory>

<Directory /var/lib/letsencrypt/http_challenges>
   AllowOverride All
   Require all granted
</Directory>

重启 Apache 并执行 certbot 试运行

$ sudo service apache2 restart
$ sudo certbot renew --dry-run

然后,重新锁定:

<Directory />
   AllowOverride None
   Require all denied
</Directory>

<Directory /var/lib/letsencrypt/http_challenges>
   AllowOverride All
   Require all granted
</Directory>

重复 Apache 重启 certbot 试运行

$ sudo service apache2 restart
$ sudo certbot renew --dry-run

此时 HTTP-01 挑战显示成功。就我而言,我强制发出 TLS-SNI-01 关闭,并强制更新我的证书并确保它们使用 HTTP-01 挑战。

我真的希望知道为什么需要这个顺序,而不仅仅是一个幸运的意外。不过,我不认为这是侥幸,因为我需要在大约 10 台机器上执行完全相同的步骤。我较新的 Ubuntu 服务器都不需要这个。

相关内容