我想问是否可以将 Certbot 用于半自动化设置,其中底层基础设施由我控制,而不是由 Certbot 控制。
我了解 Certbot 将与 Let's Encrypt 通信以发出质询,这基本上是 Certbot 需要在我的 IP 地址或我的 DNS 中找到的令牌。
我完全控制了 Apache 服务器,但它是一个非常定制的多主机设置(需要 SNI!),我不希望 Certbot 弄乱我的 Apache 配置,也不想以 root 身份运行。我们稍后会回到 sudoers。
我已经设置了托管空间mta-sts.example.org
,因为我正在实施邮件传输代理的严格传输安全
我已经使用宏告诉 Apache,那/home/djechelon/srv/www/domains/mta-sts.example.org
是我的工作区
- htdocs:通过 HTTP 提供的内容
- htdocs-secure:通过 HTTPS 提供的内容
- 日志:Apache VHost 日志
- ssl:这是
mta-sts.example.org.{key,crt,ca_bundle?}
存在的地方
我想告诉 Certbot 为我执行以下操作
- 获得 LE 的挑战
- 将挑战写入 下的适当文件
/home/djechelon/..../htdocs
,Apache 已准备好为它提供服务 - 要求 LE 验证挑战,因为 Apache已准备好迎接挑战
- 将证书写入
/home/djechelon/..../ssl/
. 如果 LE 没有提供 ca_bundle 没问题,在我这里是可选的 - 问题 Apache 重新加载(很快就会有 sudoers 设置)
我知道在这种情况下我需要使用该webroot
插件,但我很难找到所有选项的命令行帮助,包括文件和证书的存储位置。
该文档假定该过程是交互式的,因此我必须手动复制质询文件并要求 Certbot 联系 LE 进行域验证。
我相信应该有一种简单的方法来运行上面的简单脚本,它在假设整个 IT 基础设施存在(例如,您真的想运行自己的服务器软件)并且配置良好的情况下运行。
有什么帮助吗?
[编辑]我现在设法以交互方式调用它
certbot certonly --webroot -d mta-sts.example.org --preferred-challenges http --work-dir /home/djechelon/etc/letsencrypt --logs-dir /home/djechelon/letsencrypt-logs --config-dir /home/djechelon/etc/letsencrypt
它要求我提供 webroot 目录和电子邮件(我很乐意将其作为参数传递给未来的续订)。所以现在问题可能变成“我以后如何以非交互方式重新运行它?”
我不会将证书存储在用户的主目录 (
/home/djechelon/..../ssl/
) 下,因为如果用户删除证书文件,Apache 将无法启动。我同意你的推理,如果 Certbot 不弄乱网络服务器配置会更好,但目前看来你实际上是在导致你试图避免的同样的问题,因此我试图警告你。没有理由将主目录用于 HTTP-01 挑战或日志文件,也可以在 Apache 中使用静态配置,在
certonly
模式下使用 Certbot,就像您已经做的那样。我的自动续订解决方案是对所有 HTTP-01 挑战使用相同的工作目录(来自
/etc/letsencrypt/renewal/example.com.conf
):这样就可以添加一个全局
Alias
来处理所有的挑战,但也可以只将它放在需要它的虚拟主机上:交互模式可能只运行一次。Certbot 会记住证书的存储位置,并且始终位于工作目录下。
没有那么糟糕。我的解决方案是
/home/djechelon/srv/..../ssl/*
用符号链接替换简而言之:
certbot renew
使用适当的工作目录以非 root 身份运行发布命令
更新命令(也许可以
cron
-ned)当然,在续订时,应该至少安排一次 Apache 重新加载