Internet Explorer不提示客户端证书。

3
我有一个部署在IIS7.5上的ASP.Net WebApi REST服务。我正在测试如何添加客户端证书认证流程到该服务中,以便只有特定的客户端才能访问该服务。 当前情况:
  • 我使用xca创建了一个根证书、一个服务器证书和一个客户端证书。服务器证书和客户端证书使用创建的根证书进行签名。
  • 我使用mmc将创建的根证书导入到服务器和客户端的本地计算机\受信任的根证书颁发机构中。
  • 我使用mmc将创建的服务器证书导入到服务器的本地计算机\个人中。
  • 我使用mmc将创建的客户端证书导入到客户端的当前用户\个人中。
  • 在IIS中,我创建了指向创建的服务器证书的HTTPS绑定。我还为所涉及的服务配置了“需要SSL”和“需要客户端证书”。
  • 我配置了REST服务以在响应中包含CORS头。这是为了支持跨域资源请求。
问题: 当我尝试在Internet Explorer中使用Resttesttest(http://resttesttest.com/)访问客户端服务时,我没有被提示选择客户端证书,服务也没有返回任何数据。IIS日志中的错误代码是500。然而,在Chrome中进行相同的测试允许我选择客户端证书,服务返回有效数据。使用fiddler进行测试也允许我正确访问服务。 已执行的故障排除步骤:
  • 我在Internet Explorer中检查了证书 - 创建的根证书显示在受信任的根证书颁发机构下,创建的客户端证书显示在个人下。
  • 我检查了客户端证书的认证路径 - 根证书和客户端证书都显示正常。
  • 我了解到,如果只有一个可用的客户端证书,Internet Explorer默认不会提示选择客户端证书。我将我的服务器添加到受信任站点,然后设置自定义级别 - 当只存在一个客户端证书时不提示客户端证书选择为禁用。再次测试 - 我仍然没有得到选择证书的提示。
  • 使用wireshark捕获初始握手期间的流量 - 我可以看到服务器向客户端发送了“证书请求”。此外,我在接受的根证书列表中看到了我创建的根证书。在收到证书请求之后,客户端发送ACK然后FIN,ACK。服务器回复RST,ACK并结束通信。
  • 将Internet Explorer 10升级到Internet Explorer 11 - 没有任何区别。
  • 我找到了一个非常类似于我问题的stackoverflow问题:

    浏览器不提示客户端证书

    但在那种情况下,Chrome也不起作用。对于我的情况,Chrome和Fiddler都可以工作,只有Internet Explorer不能。这是最让我困惑的地方。

我已经不知道自己错过了什么,如果您有任何建议,将不胜感激。

非常感谢,

David


你在密钥用途扩展中包含了“数字签名”,并在增强型密钥用途扩展中包括了“客户端身份验证”吗?我认为IE使用后者来确定是否有效以在对话框中显示。 - jimbobmcgee
1个回答

0

我想我可能已经为你找到解决方法了。

我在我的webapiconfig.cs文件中添加了这个。

var cors = new EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true };

而且在我的 Web.Config 中,我添加了

<authentication mode="Windows"/>
<authorization>
  <allow users="?"/>
</authorization>

在我的Fetch中,我刚刚添加了

{
   method: "GET",
   headers: myHeaders,
   credentials: "include"
};

这在IE11和IE10中起作用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接