我一直在研究如何使用 nginx 作为 Web 服务器来保护 SSL 证书的私钥,但一直找不到令人满意的答案。
具体来说,对于希望我在其子域下部署网站的客户,他们担心有人可以访问其子域的证书私钥,从而建立一个看似合法的不安全网站。他们要求我使用某种软件保险库解决方案来保护他们的私钥。
本文来自 nginx 的博客以及这个描述一些解决方案,但最终它们都依赖于相同的原则:私钥受密码保护,我们将从本地或远程位置检索,并且此“检索”过程需要密码/令牌..存储在本地。
因此,我无法理解私钥如何真正变得更加安全——它看起来有点像将前门钥匙锁在钥匙箱中,而不是将其留在垫子下......然后将钥匙箱钥匙留在垫子下。
我遗漏了什么吗?有没有更好的方法使用 nginx 保护私钥?
答案1
根据您的最后一条评论,我看到了几种选择:
- 您表明您具有良好的 SSH 安全性,可以是 IP 白名单访问、无需密码登录等。
- 您显示私钥文件仅对 root 用户可读,并且存储在文档根目录之外,例如,就像在 中常见的某个地方一样
/etc/ssl
。入侵托管网站比整个服务器更为常见,这样就可以防止它被以这种方式读取。 - 关于上述观点:运行 Docker 容器时要小心;它们通常以 root 身份运行,在我看来,这是一个安全问题。Docker 容器能无根运行(实验性),但图像必须专门设计才能实现。你在其他地方获得的大多数图像都依赖于 root 身份。其中以 root 身份运行的任何内容都可以打破监狱。(编辑:在重新评估后,它确实需要一些细微差别。我应该说,可以越狱。它确实依赖于一些额外的安全机制,否则你不需要担心。
- 如果他们真的很担心,他们应该为您的服务器设置一个反向代理,然后他们可以在他们的终端执行 SSL 终止。
至于向您提供 SSL 证书:他们没必要这样做。您只需设置 Letsencrypt 即可。额外的好处是这些证书的有效期很短。
答案2
有一个解决方案,但实际上,它并不能消除信任您的服务器的需要。如果您的客户愿意将他的记录放到您的服务器上,他必须以某种方式信任您。有一个解决方案可能保护您的客户。
他们将子域名指向Web 应用程序防火墙, 喜欢Cloudflare。他们会为您创建一个 Origin 证书(位于您的服务器上的证书),并通过可信通信协议(如 GPG)向您发送证书和密钥。
他们将此子域指向您的服务器 IP 地址。
他们不要给您访问他们的 Cloudflare 帐户。
保留所有这些。他们控制 Edge 证书。他们控制 Origin 证书。他们可以随时撤销它。他们控制他们的域。唯一不能控制的,当然是您的服务器。;)
当然,@Halfgaar 提供的整个安全设置仍然是最新的。
——————————————————————-
答案3
所有内容都被评论和答案掩盖了,我只想
补充一点,仅仅窃取证书是不够的。攻击者还必须提供已验证证书的有效域。如果发生网络钓鱼攻击,网站可能看起来相同,但域名
可能不相同,并且证书不适用于不同的域名。只要 DNS 指向正确的 IP,并且 DNS 没有被欺骗或混乱,窃取 SSL 证书就毫无用处。
在客户有些怀疑的情况下,你可以使用 let's encrypt 证书,其
有效期较短(90 天)。并且必须定期更新。每次获取和更新 Let's encrypt 证书都需要域名验证。因此窃取证书在很长一段时间内不会有太大用处。