如何使用 Let's Encrypt 颁发/更新多个独立子域服务器的证书?

如何使用 Let's Encrypt 颁发/更新多个独立子域服务器的证书?

升级我的家庭基础设施以学习并提高安全性,我一直无法找到如何最好地获取证书问题并安装在我的服务器上,其中包括:

  • 防火墙 (普富思-FreeBSD):fw.example.com
  • NAS(开放媒体库- Debian Buster): nas.example.com:80nas.example.com:443
  • 网络控制器 (联合上网与 NAS 位于同一个 Debian Buster 上)nas.example.com:8443
  • 视频控制器 (Unifi ditto)nas.example.com:7443
  • 家庭自动化 (家庭助理在 hass.io 上)home.example.com:8123

有这样的背景:

  1. 我应该运行 ACME 协议软件吗(Certbot、acme.sh 或同等版本)通过 Cron 在每台服务器上运行 Let's Encrypt 发行和更新证书?还是应该在一台服务器上执行此操作,然后设置将生成的公钥和私钥复制到其他服务器上?

  2. 一份证书主题备用名称s(SAN)用于域本身(example.com)和每个子域(fw.example.com、nas.example.com 和 home.example.com)或通配符(*.example.com,用于限制身份验证方法)。还是每个服务器都应该获得自己的证书?

目前,除了防火墙之外,只有 Home Assistant 是面向外部的。因此,它是发行/续订流程的明显候选者(因为我的注册商是 Google Domains,他们不支持DNS-O1,所以如果我不是每三个月手动更新一次的话,我需要一个用于 HTTP-01 的 HTTP 服务器)。

将来,我想按顺序在防火墙上实现 OpenVPN。我的理解是,该证书是/应该私下生成的。

进一步研究建议,仅对内部网站使用 HA 代理。这样做很有意义,因为它减少了需要当前证书的地方。但是需要 https: 的软件(例如 Unifi Controller)不会抱怨吗,因为它不知道自己正在被安全访问,因为这是由 HA 代理处理的。对此有什么看法?

答案1

首先,简单介绍一下 Let's Encrypt 和 Certbot 的工作原理:

Certbot 已经实现了证书请求、生成和在 Web 服务器上安装的自动化。因此,您可以在面向 Internet 的 Web 服务器上安装 Certbot,它会从 Let's Encrypt 请求证书,修改 Web 服务器配置以使用该证书,并处理证书的后续续订。因此,无需自动化该部分。

但是,需要自动将证书复制到每个内部需要它的服务。

希望这能回答您的第一个疑问。

其次,SAN 是将使用证书的服务的名称。因此,通常情况下,您可能拥有一个提供许多不同 API、站点和服务的 Web 服务器。您无需为每个不同的站点配置单独的证书,只需使用多个 SAN 将它们全部合并为一个证书,并且只需处理续订一个证书即可。

我能想到的不在多台服务器上使用多 SAN 证书的唯一技术原因是,您将证书中的私钥分散到多台服务器上,这意味着您将更多地暴露私钥,并且如果一台服务器受到威胁,您的所有服务器都会受到威胁。

在商业环境中,您可以尝试通过为每台服务器使用一个证书来避免这种情况,但在多台服务器上使用的通配符证书也没有什么不同,而且这种证书使用得很多。通常情况下,通配符是一种省钱的方法,因为证书可能非常昂贵,但对于您来说这并不重要,因为 LE 是免费的。

对于您来说,我只需在一个证书中列出所有不同的名称,让 Certbot 处理请求和更新该证书,然后使用一些代码将证书复制到您需要的任何地方。

另一个选择是使用带有 NGINX 的 Web 服务器作为反向代理,并在那里进行所有 HTTPS 加密,这样只有 NGINX 服务器需要证书,而您无需将内部服务器暴露给互联网。这更安全一些,但您最终需要维护多一台服务器。

最后,幸运的是,OpenVPN 使用自己的证书,因此您无需担心从 CA 获取外部证书。我能给您的唯一提示是确保 OpenVPN 使用的内部 CA 具有较长的有效期(10 年),并且您的客户端证书也具有较长的有效期(>1 年)。

相关内容