如果我遵循一位同事的推理,如果您想保证 https 证书的安全,您似乎永远不应该在 Windows 服务器上运行 Apache Webserver 或 Tomcat。
在这个问题演变成 Windows 与 Linux 巨魔之战之前,让我解释一下。
例如,当将 Apache Tomcat 用于 https 网站时,私钥存储在密钥库中。为了让 Tomcat 能够使用这个密钥,我们有三个选项:
- 不在密钥库上使用密码;
- 启动Tomcat服务时需要输入keystore密码;
- 密钥库密码在配置文件中以纯文本形式设置。
使用选项 3 似乎是最常用的。但是任何有权访问此文件和密钥库的人都可以提取私钥。显然,您可以文件系统保护密钥库和配置文件。似乎 linux 提供了更多选项来区分不同进程对这些文件的访问。这个推理导致了我开始的结论。
我不熟悉 Windows 或 IIS 如何处理这个问题,但希望这在引擎盖下的工作方式类似。我的问题是我不确定。如果没有人输入密码,IIS 如何在 Windows 中使用证书?或者只是存储在注册表中而不是配置文件中?设置高证书安全性是否等于选项 2?
谁能向我解释这是如何工作的?
顺便提一句。我对 HSM 不感兴趣。现在我很想知道 Windows/IIS 是否以及如何保护不使用选项 3 的证书或私钥。
我已经搜索过,但找不到确凿的答案。我浏览了 30 个标有“证书”的页面并使用了 google。我发现很难从他们那里得到明确的答案。下面我提到了我发现的一些帮助的来源。我真的希望你能帮助我或指出我正确的来源。
stackExchange 上的安全性:
- 我的私钥在 Windows 数字证书存储中的安全性如何?
- 我应该如何在服务器上存储 SSL 密钥?
- 如何存储应用程序的私有 RSA 密钥?
- 跨平台证书存储有哪些好的设计实践?
微软:
- [TechNet 博客] 什么是 Windows 中的强密钥保护?
- [TechNet, EFS] 如何存储私钥
各种网站:
- [ServerFault] 如何管理 Web 服务器 SSL 私钥保护(密码与无密码)?
- [CodingHorror] 保持私钥私密
- [SecurityInnovation] 如何测试不安全的密钥存储漏洞
- [RootSecurity] 如何从 Microsoft 证书存储中导出“不可导出”证书
- [赛门铁克] 攻击者如何从数字证书中窃取私钥