gpt4 book ai didi

windows - IIS 中的 TLS 相互身份验证无需重新协商

转载 作者:可可西里 更新时间:2023-11-01 10:26:27 54 4
gpt4 key购买 nike

我正在托管一个网络应用程序,该应用程序使用 TLS 对所有连接进行相互(双向)身份验证。我的 Web 应用程序在 Windows Server 2012 上使用 IIS 8 托管,并且在 IIS 中配置为需要 SSL 并且还需要客户端证书。当我从浏览器访问 Web 应用程序时,系统提示我输入证书,一切似乎都很好。

但是,当我查看数据包捕获时,我发现 TLS session 以单向身份验证 session 开始,然后发送请求,然后 session 重新协商为双向身份验证 session ,然后响应在此 2 路身份验证 session 中发送。

这是 Not Acceptable ,原因如下:

  1. 请求不是通过双向验证的 TLS 连接发送的。
  2. 这无缘无故地增加了一个额外的 TLS session 协商。
  3. 验证是否使用了 2 向身份验证很困难,因为 2 向身份验证握手消息在初始 1 向身份验证 session 中被加密
  4. TLS session 重新协商存在与之相关的安全漏洞,除非您正确执行。

我的猜测是 IIS 在应用适当的 SSL 设置之前需要知道您正在尝试访问哪个站点,因此它以“默认”单向身份验证 session 开始,并在收到请求后确定它需要使用双向身份验证。由于我在 IIS 上托管的所有内容都需要双向身份验证,因此我希望这是“默认”行为。是否有某种方法可以对 Web 应用程序进行编码或将 IIS(或 Windows Server 2012)配置为始终以经过双向身份验证的 TLS session 开始?

最佳答案

http://technet.microsoft.com/en-us/security/bulletin/MS10-049 找到了答案.它没有列出 IIS 8,但针对 IIS 7 的修复似乎有效:

对于 IIS 7:

将以下文本保存到名为 Enable_SSL_Renegotiate_Workaround.js 的文件中

// replace 1 on this line with the number of the web site you wish to configure
var vdirObj=GetObject("IIS://localhost/W3svc/1");

WScript.Echo("Value of SSLAlwaysNegoClientCert Before: " + vdirObj.SSLAlwaysNegoClientCert);
vdirObj.Put("SSLAlwaysNegoClientCert", true);
vdirObj.SetInfo();
WScript.Echo("Value of SSLAlwaysNegoClientCert After: " + vdirObj.SSLAlwaysNegoClientCert);

从提升的/管理员命令提示符运行以下命令:

cscript.exe enable_ssl_renegotiate_workaround.js

关于windows - IIS 中的 TLS 相互身份验证无需重新协商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927886/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com