信任不可信的 CA - 我可以限制系统信任它的方式吗?

Dai*_*Dai 33 ssl-certificate x509 certificate-authority

(发布到 ServerFault 而不是 StackOverflow 因为我觉得它更关心操作系统配置而不是编程代码)。

我目前负责维护连接到第三方网络服务的系统。此 Web 服务需要客户端身份验证证书,这很公平,但 Web 服务本身使用由自创建根证书颁发机构证书创建的自签名证书进行保护 - 与创建客户端身份验证证书的根相同。

仅将当前服务证书添加到已知信任列表并忽略自创建的权威证书就足够了,不幸的是,服务证书会定期更改,因此必须信任权威证书以确保应用程序在服务证书已更新。

但是,根据我在运行 Web 服务的公司的经验,我(个人)并不信任 CA 证书 - 如果它会泄露到网络,我不会感到惊讶 - 令人担忧的是,CA 证书没有设置密钥使用限制它(虽然外部 MITM 攻击是可能的,但虽然远程,但我更关心用于代码签名的证书泄露,例如)。

我是否可以告诉我的计算机(当前是服务器盒,但在未来的普通桌面客户端盒中)信任 CA,但仅针对给定的一组密钥用法和一小组可能的主题名称(域名) )?

服务器目前是 Windows Server 2012 R2,但它可以在 Linux 机器上运行 - 尽管台式机都是 Windows 机器。

Cry*_*t32 43

对的,这是可能的。在 Windows 的情况下,有一个称为交叉认证或合格从属的功能。

这个想法是您在您的环境中签署第三方颁发的 CA 证书。结果远程 SSL 证书链接到您自己的根 CA 证书。为了保护自己免受可能的流氓证书的侵害,您实现了一个Name Constraints证书扩展,您可以在其中指定一个可接受的名称列表。如果第三方 CA 为任何其他名称颁发证书(未在名称约束扩展中明确指定),它将被您的 CryptoAPI 提供商自动拒绝。

除了名称约束之外,您还可以通过Application Policies在交叉证书中定义证书扩展来描述增强的密钥用法约束。因此,您的信任提供者将仅成功验证Application Policies扩展中指定的用法。

更多信息:使用 Windows Server 2003 规划和实施交叉认证和合格的从属关系

ps 尽管文章是针对 Windows Server 2003 编写的,但该文章仍然适用于最新的 Windows Server 版本。