首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使IIS在初始握手期间需要SSL客户端证书

使IIS在初始握手期间需要SSL客户端证书
EN

Stack Overflow用户
提问于 2010-03-26 02:27:52
回答 2查看 26.2K关注 0票数 22

我正在尝试将IIS网站配置为需要SSL客户端证书。该网站是在IIS 6和7中设置的,但我更感兴趣的是让它在7中工作。我在IIS中设置了“需要客户端证书”属性,它在通过web浏览器访问站点时工作得很好,但基于Java的客户端在访问它时遇到了问题。

我认为问题在于IIS在初始SSL握手期间没有请求客户端证书。相反,它会协商一个普通的SSL连接,检查资源是否需要客户端证书,如果需要,它会启动一个新的SSL握手来请求客户端证书。IIS这样做是为了支持只需要某些资源的客户端证书的站点。即使为整个网站指定了要求,IIS仍会启动两次SSL握手。我希望强制IIS在第一次SSL握手时请求客户端证书,这将有望使客户端正常工作。(客户端是由外部合作伙伴开发的,我几乎不知道它是如何设置的,也无法访问其源代码)

以前有人在IIS中处理过这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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“的文件中

代码语言:javascript
复制
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的知识库文章)

票数 7
EN

Stack Overflow用户

发布于 2013-08-15 18:41:16

下面是我如何在IIS 7.5上做到这一点:

在管理命令提示符下运行以下命令:netsh http show sslcert

  • Save
  1. in a text file。将看起来像这样:

IP:端口: 0.0.0.0:443证书哈希:A哈希值应用程序ID:{a GUID}证书存储名称:我的验证客户端证书吊销:已启用验证吊销使用缓存的客户端证书:已禁用使用检查:已启用吊销刷新时间:0 URL检索超时:0 Ctl标识符:(null) Ctl存储名称:(null) DS映射器用法:已禁用协商客户端证书:使用该信息Disabled

  • Create批处理文件:

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非常重要的原因,这样它就知道要重新添加什么。)

  • 运行该批处理文件,检查是否有错误,完成。

请记住,此设置适用于每个证书,而不是每个服务器。因此,如果您使用多个证书,或者更改/更新您的证书,您将不得不再次执行此操作。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2518314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档