我正在诊断一些使用 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 服务器都不需要这个。