要使 apache 中的 mod_ssl 正常工作,您需要在服务器上拥有 RSA 私钥。如果密钥受密码保护,则每次重新启动 apache 时都必须输入密码。这样SSLPassPhraseDialog
您就可以将密钥加密存储,并让程序将密码传递给它,但这实际上并不比保持密钥未加密更安全。
我想知道 apache 是否支持或可以支持使用密钥代理执行需要私钥的操作,就像ssh-agent
openssh 的工作方式一样。这样,我只需要在服务器本身重新启动时输入密钥的密码(假设代理在正常操作期间不会因某种原因死亡)。
我意识到密钥存储在代理的内存中,从内存中获取密钥是可能的,但很难做到。此外,如果代理实际上是通过 ssh 从另一台主机转发的,并且密钥在那边的内存中,那么只要网络服务器被攻破,就不可能获取私钥。
如果 Apache 目前不支持此功能,那么“是否可以支持此功能”的答案是什么?我不确定密钥操作如何工作,以及私钥需要什么级别的暴露,所以在我深入研究代码尝试自己破解某些东西之前,我想先问一下。
答案1
你的想法乍一看很有趣,但实际上并不相关。你的提议只是把安全问题推到了别的地方。
您的 Apache2 进程必须通过 IPC 或 API 与“私钥缓存”进行通信,并且该通道也应该受到保护,否则攻击者可以轻松查询证书。
所以如果你对文件系统的安全性没有信心让你的服务器证书没有密码,那么这种缓存机制并不是更安全的。
顺便说一句,只有少数原因需要完全重启 Apache2 - 比如 SSL 配置更改。您应该选择apachectl graceful
不需要重新加载证书的命令,这样就不会再次要求您输入密码。
另一个想法:如果您的服务器安全通过 IDS 和文件完整性检查器得到很好的监控,并且在您的系统和 SSL 证书可能受到损害时发出警报,那么您可以承担风险,依靠撤销列表,让您的证书无需密码保护,以减轻您的生活。