Internet explorer Internet Explorer不提示输入客户端证书

Internet explorer Internet Explorer不提示输入客户端证书,internet-explorer,iis,ssl,Internet Explorer,Iis,Ssl,我在IIS7.5中部署了一个ASP.NETWebAPI REST服务。我正在测试如何将客户端证书身份验证过程添加到此服务,以便只有特定的客户端才能访问该服务 当前情况: 我创建了根证书、服务器证书和客户端 使用xca的证书。服务器证书和客户端证书 使用创建的根证书进行签名 我使用mmc将创建的根证书导入到本地 服务器和服务器上的计算机\受信任的根证书颁发机构 客户 我使用mmc将创建的服务器证书导入到本地 服务器上的计算机\个人 我使用mmc将创建的客户端证书导入到当前 客户端上的用户\个人

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

当前情况:

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

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

执行了故障排除步骤:

  • 我在Internet Explorer中检查了证书-创建的根目录 证书显示在受信任的根证书颁发机构和 创建的客户端证书显示在“个人”下
  • 我检查了客户端证书的认证路径-根证书和 证书和客户端证书显示ok
  • 我知道Internet Explorer默认情况下不会提示 客户端证书(如果只有一个可用)。我添加了我的服务器 到受信任的站点,然后设置自定义级别-不提示输入客户端 仅存在一个客户端证书时的证书选择 残废再次测试-仍然没有提示选择 证书
  • 使用wireshark在初始握手期间捕获流量- 我可以看到服务器向客户端发送了“证书请求”。 此外,我在列表中看到了我创建的根证书 接受的根证书。拿到证书之后 请求时,客户端发送ACK,然后发送FIN,ACK。服务器以 RST、ACK和通信结束
  • 将Internet Explorer 10升级到Internet Explorer 11-无差异
  • 我发现了一个stackoverflow问题,这个问题与我之前提到的问题非常相似 拥有:

    但在这种情况下,Chrome似乎也不起作用。为了我的 case Chrome和Fiddler可以工作,只有Internet Explorer不能。这是 最让我困惑的是什么

我完全不知道我可能错过了什么,所以任何建议都将不胜感激

非常感谢,


大卫

我想我可以帮你解决这个问题

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

var cors = new EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true };
在我的Web.Config中,我添加了

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

这适用于IE11和IE10

您是否将
数字签名
包含在密钥使用扩展中,并将
客户端身份验证
包含在增强密钥使用扩展中。我认为IE使用后者来确定它是否可以在对话框中显示。
{
   method: "GET",
   headers: myHeaders,
   credentials: "include"
};