信任一个不可信的CA–我能限制系统如何信任它吗?

(发布到ServerFault而不是StackOverflow,因为我觉得它涉及的操作系统configuration比编程代码更多)。

我目前负责维护连接到第三方Web服务的系统。 这个web服务需要客户端authentication证书,这是公平的,但web服务本身是由一个自我创build的根证书颁发机构证书创build的自签名证书保护的,这个证书是创build客户端authentication证书的根。

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

然而,根据我在运行Web服务的公司的经验,我不(个人)信任CA证书 – 如果它泄漏到Web上,我不会感到意外 – 而且令人担忧的是,CA证书没有对密钥使用进行限制它(虽然外部的MITM攻击是可能的,尽pipe很遥远,我更关心用于代码签名的泄漏证书)。

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

该服务器目前是Windows Server 2012 R2,但它可以在Linux机器上运行 – 尽pipe桌面机器都是Windows机器。

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

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

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

详细信息: 使用Windows Server 2003规划和实施交叉authentication和合格的从属

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