我有一个部署在IIS7.5上的ASP.Net WebApi REST服务。我正在测试如何添加客户端证书认证流程到该服务中,以便只有特定的客户端才能访问该服务。
当前情况:
- 我使用xca创建了一个根证书、一个服务器证书和一个客户端证书。服务器证书和客户端证书使用创建的根证书进行签名。
- 我使用mmc将创建的根证书导入到服务器和客户端的本地计算机\受信任的根证书颁发机构中。
- 我使用mmc将创建的服务器证书导入到服务器的本地计算机\个人中。
- 我使用mmc将创建的客户端证书导入到客户端的当前用户\个人中。
- 在IIS中,我创建了指向创建的服务器证书的HTTPS绑定。我还为所涉及的服务配置了“需要SSL”和“需要客户端证书”。
- 我配置了REST服务以在响应中包含CORS头。这是为了支持跨域资源请求。
- 我在Internet Explorer中检查了证书 - 创建的根证书显示在受信任的根证书颁发机构下,创建的客户端证书显示在个人下。
- 我检查了客户端证书的认证路径 - 根证书和客户端证书都显示正常。
- 我了解到,如果只有一个可用的客户端证书,Internet Explorer默认不会提示选择客户端证书。我将我的服务器添加到受信任站点,然后设置自定义级别 - 当只存在一个客户端证书时不提示客户端证书选择为禁用。再次测试 - 我仍然没有得到选择证书的提示。
- 使用wireshark捕获初始握手期间的流量 - 我可以看到服务器向客户端发送了“证书请求”。此外,我在接受的根证书列表中看到了我创建的根证书。在收到证书请求之后,客户端发送ACK然后FIN,ACK。服务器回复RST,ACK并结束通信。
- 将Internet Explorer 10升级到Internet Explorer 11 - 没有任何区别。
我找到了一个非常类似于我问题的stackoverflow问题:
但在那种情况下,Chrome也不起作用。对于我的情况,Chrome和Fiddler都可以工作,只有Internet Explorer不能。这是最让我困惑的地方。
我已经不知道自己错过了什么,如果您有任何建议,将不胜感激。
非常感谢,
David