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