根据这个答案 IIS 可以使用颁发机构信息访问证书扩展来检索丢失的颁发者证书。
以下是场景。有一个 IIS 安装,其中包含一个具有 SSL 证书的 HTTPs 端点。通常,IIS 所有者还必须将所有中间证书安装到本地“中间颁发机构”(“CA”) 存储中,以便当客户端连接时,服务器可以发送除根证书之外的所有链。但是 IIS 所有者可能会忘记安装中间证书。然后根据该答案,IIS 将使用 AIA 并检索中间证书并继续将其提供给所有客户端。
看起来这是默认行为,我找不到如何改变它。
我可以禁止 IIS 获取中间证书吗?有什么设置吗?
答案1
看起来没有关于此行为的详细文档,但少量的黑盒测试表明此行为始终存在,并且只能通过使用防火墙规则阻止服务器和 CA 基础架构之间的连接来抑制。以下是使用 Azure Web Roles osFamily=3
(Windows Server 2012) 执行此操作的方法:
- 在 .csdef 中不要列出
<Certificates>
元素下的中间证书。 - 推断 CA 基础设施响应的 IP 地址范围。为此,请检查您的证书并在证书属性中找到一些 AIA 或 OCSP URI,然后使用它
ping
来查找 IP 地址。 - 创建一个网络安全组在 Azure 中使用防火墙规则允许来自任何地址的入站连接(以便您可以访问您的服务并验证 SSL 功能)并禁止到 CA 的 IP 范围的出站连接(这是实验的关键)。
- 创建一个虚拟网络在 Azure 中创建一个子网,并将该子网绑定到上面的网络安全组。
- 更改 .cscfg,添加一条
<NetworkConfiguration>
指令,将服务部署到之前创建的虚拟网络中,并将 Web 角色部署到之前创建的子网中(关键点)。将实例数设置为 1,以便于测试。
现在您已经准备就绪。部署您的服务并观察第三方工具报告未提供中间证书。将防火墙规则更改为“允许”,然后重新映像角色实例 - 一旦重新启动,第三方工具就会报告中间件现已提供服务。将规则更改为“拒绝”,然后重新映像实例-中间体不再提供服务。
这次黑盒测试证明证书安装过程可以利用 CA 在线基础设施。如果 CA 在线基础设施无法访问,则中间证书将无法在线获取。目前尚不清楚它是 IIS 的一部分还是 Windows 的一部分,但这也许并不重要。
这就是为什么 Azure 云服务应始终在 .csdef 中列出所有中间证书,以确保无论部署时 CA 基础设施是否可访问,它们都被部署到实例上。