我们在我公司的安全小组中讨论了以下管理 SSL 私钥的选项中哪个更糟糕。
Web 服务器需要访问私钥以进行加密操作。应保护该文件免受未经授权的访问。同时,服务器应该自动启动,无需人工干预(如果足够安全的话)。
我们正在讨论三个选项:
使用文件系统权限保护密钥。
使用受密码保护的密钥并在每次重新启动时手动输入密钥。
使用受密码保护的密钥并将密钥存储在文件系统中以自动重新启动。
我们的担忧如下:
使用选项 1,重新启动是自动的,但妥协可能会复制私钥,并且由于不受保护,可用于解密通信或冒充我们的服务器。
选项 2 似乎更安全,但它需要人工干预,如果它发生在非工作时间,系统管理员会担心。此外,密码应该与多个系统管理员共享,并且您知道共享的秘密不再是秘密。
选项 3 具有前两个选项中最好的,但如果有人可以访问密钥,也可以访问密码:(,所以它看起来一点也不安全。
您如何管理服务器私钥的安全性?还有其他(更安全的)选项吗?
选项 1 是我认为公认的标准。
但是,如果您真的想要额外的安全性,为什么不设置一个安全服务器(不在您的 DMZ 中)来监控您的网络服务器,如果 apache 出现故障,它可以自动远程登录,并重新启动 apache,提供密码。
因此密码保存在计算机上,但与运行 apache 的密码不同,而不是在您的 DMZ 中。您可以获得使用密码的额外安全性,并保持自动重启的能力。
如果有人对服务器有足够的访问权限来读取密钥,那么他们很可能也有足够的访问权限来附加调试器并从内存中获取密钥。
除非您真的喜欢在半夜被叫醒输入密码,否则请选择选项 1。当您有很多服务器时,您希望在出现故障时自动重启,而选项 2 不允许这样做。
比 1. 更高的安全性但比 2. 更少的停机时间的一种可能性是创建有效期短的私钥并定期回收它们。这样您就可以在没有密码的情况下存储它们,但可以减少漏洞窗口。
正如您所认识到的,选项 3. 不提供任何超过 1 的额外安全性。
实用性表明,在几乎所有情况下,您最终都将使用选项 (1)。文件系统权限是大多数安全与实际场景中的最佳方式。
在 *nix 系统上,您只能将私钥限制为 root,因为大多数优秀的 Web 服务器(如 apache)将以 root 身份启动,但一旦拥有所需的特权端口(80、443 等),就会将其 privs 降级为受限用户.
正如您所提到的,从安全角度来看,选项 (3) 与选项 (1) 相同。