更新:原始 SNI 质询类型已被禁用。有一种新的更安全的 SNI 质询类型,但服务器支持有限。SNI 可能不适合小型网站。
我已将 HTTP 配置为允许通过 HTTP 访问 /.well-known/,并拒绝或重定向所有其他请求。所有域都配置为使用相同的文件系统目录。服务器添加了“Strict-Transport-Security”标头,以使支持的浏览器缓存升级要求。DNS CAA 记录限制了可以提供证书的 CA。
原始回应:来自文档Certbot webroot 插件
webroot 插件的工作原理是为您请求的每个域名创建一个临时文件
${webroot-path}/.well-known/acme-challenge
。 然后 Let's Encrypt 验证服务器发出 HTTP 请求来验证每个请求域的 DNS 解析为运行 certbot 的服务器。
在私人使用的家庭服务器上,我禁用了端口 80,也就是说,路由器中没有启用任何端口转发。我无意开放该端口。
我如何告诉 certbot,验证服务器不应该发出 HTTP 请求,而应该发出 HTTPS(端口 443)请求来验证域的所有权?
验证服务器甚至不需要验证主服务器的证书,因为它默认已经使用 HTTP。我可能有一个自签名证书,或者需要续订的证书,但这并不重要。
目前我的情况是,我需要启用端口 80 转发以及端口上的服务器,以便创建/更新证书。这不允许我使用 cronjob 来更新证书。好吧,如果工作足够多的话,我会这样做,但是我已经有一个在 443 上监听的服务器,它也可以完成这项工作。
答案1
据报道https://community.letsencrypt.org/t/shouldnt-verification-via-dns-record-be-a-priority/604/47这letsencrypt.shupdater 支持通过 DNS 进行验证。很少有 updater 脚本实现了此功能。但是,对于初始配置而言,HTTP 方法是最简单的实现方法。
您的脚本可能使用 TNS SNI 或先前密钥的所有权证明进行续订。规范可在以下位置找到https://datatracker.ietf.org/doc/html/draft-ietf-acme-acme-01#section-7.5。如果是这种情况,您无需启用 HTTP。