升级我的家庭基础设施以学习和提高安全性,我无法找出如何最好地获得证书问题并在我的服务器上安装,其中包括:
- 防火墙(pfSense - FreeBSD):
fw.example.com
- NAS(Openmediavault - Debian Buster):
nas.example.com:80
▷nas.example.com:443
- 网络控制器(Unifi在与 NAS 相同的 Debian Buster 上)
nas.example.com:8443
- 视频控制器(Unifi 同上)
nas.example.com:7443
- 家庭自动化(hass.io 上的家庭助理)
home.example.com:8123
有了这样的背景:
我是否应该通过 Cron 在每台服务器上运行 ACME 协议软件(Certbot、 acme.sh 或同等软件)以让 Let's Encrypt 问题和更新证书?或者我应该在一台服务器上执行此操作并设置将生成的公钥和私钥复制到其他服务器?
是一个具有域本身 (example.com) 的主题备用名称(SAN) 的证书,并且每个子域 (fw.example.com、nas.example.com 和 home.example.com) 或通配符 (*.example)一个证书.com,它限制了身份验证方法)。还是每个服务器都应该获得自己的证书?
目前,除了防火墙之外,只有 Home Assistant 将面向外部。因此,它是问题/续订过程的明显候选者(鉴于我的注册商是 Google Domains,他们不支持DNS-O1,所以如果我不是每三个月手动续订一次,我需要一个 HTTP 服务器用于 HTTP-01 )。
将来,我想按顺序在防火墙上实现 OpenVPN。我的理解是,证书是/应该是私下生成的。
进一步的研究表明,HA 代理仅用于内部网站。有道理,因为它减少了需要当前证书的地方。但是需要 https 的软件:(例如 Unifi 控制器)不会抱怨,因为它不会知道它正在被安全访问,因为这是由 HA 代理处理的。对此有什么想法?
首先,介绍一下 Let's Encrypt 和 Certbot 的工作原理:
Certbot 已经在网络服务器上自动执行证书请求、生成和安装。因此,您将 Certbot 安装在面向 Internet 的 Web 服务器上,它会从 Let's Encrypt 请求证书,修改 Web 服务器配置以使用所述证书,并处理证书的后续更新。所以没有必要自动化这部分。
但是,需要将证书自动复制到内部需要它的每个服务。
希望这能回答你的第一个问题。
其次,SAN 是将使用证书的服务的名称。所以通常你可能有一个 Web 服务器,它提供许多不同的 API 和站点和服务。无需为每个不同的站点配置单独的证书,您只需使用多个 SAN 将它们全部组合成一个证书,并且只需要处理更新单个证书。
我能想到的不在多台服务器上使用多 SAN 证书的唯一技术原因是,您将证书中的私钥分散到多台服务器上,这意味着您要更多地公开私钥,如果一台服务器受到威胁,您的所有服务器都受到威胁。
在业务环境中,您尝试通过为每台服务器使用一个证书来避免这种情况,但是在多台服务器上使用的通配符证书并没有什么不同,而且这种情况被大量使用。通常,通配符是一种省钱的方法,因为证书可能非常昂贵,但在您的情况下,这并不重要,因为 LE 是免费的。
在您的情况下,我只需在一个证书中列出所有不同的名称,让 Certbot 处理请求和更新该证书,然后使用一些代码将证书复制到您需要的任何地方。
另一种选择是使用带有 NGINX 的 Web 服务器作为反向代理,并在那里进行所有 HTTPS 加密,这样只有 NGINX 服务器需要证书,而您不需要将内部服务器暴露给 Internet。它更安全一些,但您最终需要维护一台服务器。
最后,幸运的是,OpenVPN 使用它自己的证书,因此您无需为此担心从 CA 获取外部证书。我能给你的唯一提示是确保 OpenVPN 使用的内部 CA 有很长的有效期(10 年),并且你的客户端证书也有(>1 年)。