我正在托管一个 Web 应用程序,该应用程序使用 TLS 和双向(2 路)身份验证进行所有连接。我的 Web 应用程序在 Windows Server 2012 上使用 IIS 8 托管,并且在 IIS 中配置为需要 SSL 并且还需要客户端证书。当我从浏览器访问 Web 应用程序时,系统会提示我输入证书,一切似乎都很好。
但是,当我查看数据包捕获时,我看到 TLS 会话以单向身份验证会话开始,然后发送请求,然后将会话重新协商为 2 向身份验证会话,然后响应是在此 2 向身份验证会话中发送。
这是不可接受的,原因如下:
- 请求不是通过 2-way 认证的 TLS 连接发送的。
- 这无缘无故地增加了额外的 TLS 会话协商。
- 验证是否使用了 2-way 身份验证很困难,因为 2-way 身份验证的握手消息在初始 1-way 身份验证会话中被加密
- 除非您正确执行,否则 TLS 会话重新协商具有与之相关的安全漏洞。
我的猜测是 IIS 需要知道您正在尝试访问哪个站点才能应用适当的 SSL 设置,因此它以“默认”单向身份验证会话开始,并在收到请求后确定它需要使用 2 向身份验证。由于我在 IIS 上托管的所有内容都需要双向身份验证,因此我希望这是“默认”行为。是否有某种方法可以对 Web 应用程序进行编码或将 IIS(或 Windows Server 2012)配置为始终以 2 路身份验证的 TLS 会话开始?