Internet Explorer不会提示客户端证书

时间:2015-10-09 23:45:15

标签: internet-explorer iis ssl

我在IIS7.5中部署了ASP.Net WebApi REST服务。我正在测试如何向此服务添加客户端证书身份验证过程,以便只有特定的客户端才能访问该服务。

现状:

  • 我创建了根证书,服务器证书和客户端 使用xca的证书。服务器证书和客户端证书 使用创建的根证书签名。
  • 我使用mmc将创建的根证书导入到Local 服务器和服务器上的计算机\受信任的根证书颁发机构 客户端。
  • 我使用mmc将创建的服务器证书导入到Local 服务器上的计算机\个人。
  • 我使用mmc将创建的客户端证书导入Current 用户\个人在客户端。
  • 在IIS中,我创建了指向已创建服务器的HTTPS绑定 证书。我还配置了“要求SSL'和“需要客户” 证书'对于有问题的服务。
  • 我将REST服务配置为包含响应中的CORS头。 这是为了支持跨域资源的请求。

问题:

当我尝试使用Internet Explorer中的Resttesttest(http://resttesttest.com/)访问客户端上的服务时,系统不会提示我选择客户端证书,并且该服务不会返回任何数据。 IIS日志中的错误代码为500. 但是,在Chrome中执行相同的测试允许我选择客户端证书,该服务返回有效数据。使用fiddler进行测试还可以让我正确访问服务。

执行故障排除步骤:

  • 我检查了Internet Explorer中的证书 - 创建的根目录 证书显示在受信任的根证书颁发机构和 创建的客户端证书显示在Personal。
  • 我检查了客户端证书的认证路径 - 两者都是根 证书和客户证书显示确定。
  • 我了解默认情况下Internet Explorer不会提示 客户端证书(如果只有一个可用)。我添加了我的服务器 到可信站点然后设置自定义级别 - 不要提示客户端 仅存在一个客户端证书时的证书选择 禁用。再次测试 - 我仍然没有及时选择 证书。
  • 使用wireshark在初始握手期间捕获流量 - 我可以看到服务器发送了“证书请求”。给客户。 此外,我看到我在列表中创建的根证书 接受的根证书。获得证书后立即获得 请求,客户端发送ACK然后FIN,ACK。服务器响应 RST,ACK和通信结束。
  • 将Internet Explorer 10升级到Internet Explorer 11 - 没有区别。
  • 我发现了一个与问题I非常相似的stackoverflow问题 有:

    Browser is not prompting for a client certificate

    但在这种情况下,Chrome似乎也无法正常工作。为了我的 案例Chrome和Fiddler工作,只有Internet Explorer没有。这是 让我最困惑的是什么。

我完全不知道自己可能错过了什么,所以我们非常感谢任何建议。

非常感谢,

大卫

1 个答案:

答案 0 :(得分: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!