我在 nat 后面设置了一个带有一些虚拟机的服务器。我想对我的 xmpp-server-vm 使用加密,因此需要 vm 内的证书。是否有可能使用 nginx 作为反向代理,以便我可以运行 letsencrypt 并使用 xmpp-server 获取/更新 vm 上的证书,并将私钥保留在该机器上?我无法使用 nginx 作为 TLS 终止代理,因为我的 vm 不应有权访问反向代理本身,而这是必需的,因为 xmpp 软件需要访问密钥。
编辑:
我制作了一个示意图来说明我想做的事情:
我的基本问题是,我不知道 letsencrypt 是否在启用了服务器名称指示的反向代理后面工作,所以我可以在 xmpp-server-vm 中获取证书来加密 xmpp 流量。
答案1
除了 HTTP-01 之外,Let's Encrypt 还允许其他形式的质询/响应方法。certbot 通过命令行上的附加标志实现此功能:
certbot -h manual
DNS-01 要求将质询插入到 DNS 记录中的 TXT 记录中,并且需要 DNS 服务器/托管提供商允许您通过脚本执行此操作。这是可行的,但工作量很大。
我成功使用 DNS-01 为 40 多个热点系统提供多个证书。命令和控制主机运行 certbot 并检索与 DNS 提供商的配置文件匹配的域的所有证书。热点通过 scp 从命令和控制主机获取证书和密钥。
答案2
我设法通过一个非常简单的解决方案实现了这一点,尽管这不是我最初的想法。我在主机操作系统上运行 letsencrypt,并通过 ssh 将私钥和证书复制到虚拟机中。
答案3
您提供的解决方案似乎远非理想。您为什么不在反向代理上运行 certbot 有什么好理由吗?您的描述暗示反向代理背后的所有内容都在私有网络上 - 关闭代理上的原始证书验证可能是安全的。