我正在尝试将IIS网站配置为需要SSL客户端证书。该网站是在IIS 6和7中设置的,但我更感兴趣的是让它在7中工作。我在IIS中设置了“需要客户端证书”属性,它在通过web浏览器访问站点时工作得很好,但基于Java的客户端在访问它时遇到了问题。
我认为问题在于IIS在初始SSL握手期间没有请求客户端证书。相反,它会协商一个普通的SSL连接,检查资源是否需要客户端证书,如果需要,它会启动一个新的SSL握手来请求客户端证书。IIS这样做是为了支持只需要某些资源的客户端证书的站点。即使为整个网站指定了要求,IIS仍会启动两次SSL握手。我希望强制IIS在第一次SSL握手时请求客户端证书,这将有望使客户端正常工作。(客户端是由外部合作伙伴开发的,我几乎不知道它是如何设置的,也无法访问其源代码)
以前有人在IIS中处理过这个问题吗?
发布于 2010-07-09 20:19:57
我花了一段时间才找到这个元数据库设置。我们的客户端使用新的certicom库时也遇到了同样的问题。自从发现围绕SSL重新协商的MITM攻击以来,许多圈子中的答案一直是挂起重新协商请求。
从\inetpub\adminscripts运行以下cmd将强制IIS始终请求客户端证书。
对于IIS6: cscript adsutil.vbs set \w3svc\siteID\SSLAlwaysNegoClientCert True
(因此对于默认网站,cscript adsutil.vbs设置为\w3svc\1\SSLAlwaysNegoClientCert True)
请记住,某些客户端Internet Explorer在收到数据包时会提示输入客户端证书,无论是否需要客户端证书。
对于IIS 7:
将以下文本保存到名为"Enable_SSL_Renegotiate_Workaround.js“的文件中
var vdirObj=GetObject("IIS://localhost/W3svc/1");
// replace 1 on this line with the number of the web site you wish to configure
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
(摘自977377的知识库文章)
发布于 2013-08-15 18:41:16
下面是我如何在IIS 7.5上做到这一点:
在管理命令提示符下运行以下命令:netsh http show sslcert
IP:端口: 0.0.0.0:443证书哈希:A哈希值应用程序ID:{a GUID}证书存储名称:我的验证客户端证书吊销:已启用验证吊销使用缓存的客户端证书:已禁用使用检查:已启用吊销刷新时间:0 URL检索超时:0 Ctl标识符:(null) Ctl存储名称:(null) DS映射器用法:已禁用协商客户端证书:使用该信息Disabled
netsh http show sslcert netsh http delete sslcert ipport=0.0.0.0:443 netsh http从上面添加sslcert ipport=0.0.0.0:443 certhash=your证书散列{来自上面的GUID } certstorename=MY verifyclientcertrevocation=enable UsageCheck=Enable clientcertnegotiation=enable netsh http show sslcert
(是的,您必须删除并重新添加;您不能就地更改clientcertnegotiation。这就是保存散列和GUID非常重要的原因,这样它就知道要重新添加什么。)
请记住,此设置适用于每个证书,而不是每个服务器。因此,如果您使用多个证书,或者更改/更新您的证书,您将不得不再次执行此操作。
https://stackoverflow.com/questions/2518314
复制相似问题