我正在托管一个Web应用程序,该应用程序使用TLS与所有连接进行相互(双向)身份验证。我的Web应用程序在Windows Server 2012上由IIS 8托管,并且在IIS中配置为需要SSL并且还需要客户端证书。当我从浏览器访问Web应用程序时,系统会提示我输入证书,一切似乎都很好。
但是,当我查看数据包捕获时,我看到TLS会话以单向认证会话开始,然后发送请求,然后将会话重新协商为双向认证会话,然后响应在此双向身份验证会话中发送。
由于以下原因,这是不可接受的:
我的猜测是IIS需要知道您尝试访问哪个网站才能应用适当的SSL设置,因此它以“默认”单向认证会话开始,并在收到请求后确定它需要使用双向身份验证。由于我在IIS上托管的所有内容都需要双向身份验证,因此我希望这是“默认”行为。有没有办法编写Web应用程序或配置IIS(或Windows Server 2012)始终以双向认证的TLS会话开始?
答案 0 :(得分:2)
在http://technet.microsoft.com/en-us/security/bulletin/MS10-049找到答案。它没有列出IIS 8,但IIS 7的修复似乎有效:
对于IIS 7:
将以下文本保存到名为“Enable_SSL_Renegotiate_Workaround.js”的文件中
var vdirObj = GetObject(“IIS:// localhost / W3svc / 1”); //将此行上的1替换为您要配置的网站编号
WScript.Echo(“SSLAlwaysNegoClientCert之前的值:”+ vdirObj.SSLAlwaysNegoClientCert); vdirObj.Put(“SSLAlwaysNegoClientCert”,true); vdirObj.SetInfo(); WScript.Echo(“SSLAlwaysNegoClientCert之后的值:”+ vdirObj.SSLAlwaysNegoClientCert);
从提升/管理员命令提示符运行以下命令:
cscript.exe enable_ssl_renegotiate_workaround.js
答案 1 :(得分:0)
在我们的部署过程中,我们使用网络配置实用程序
将证书绑定到端口netsh http add sslcert ipport=0.0.0.0:443 certhash=f882031933dc66a88993d5b5c326ed21b2ea8779 appid={4dc3e166-e14b-4a21-b022-59fc669b0914}
显然可以添加额外的标志,这将产生与juhraffe的解决方案中描述的相同的效果
所以这就是我们修改命令的方式
netsh http add sslcert ipport=0.0.0.0:443 certhash=f882031933dc66a88993d5b5c326ed21b2ea8779 appid={4dc3e166-e14b-4a21-b022-59fc669b0914} clientcertnegotiation=enable