23

背景:

我正在将内部应用程序更新为两步验证过程。我想在传统的用户名/密码表单之上添加一个客户端证书身份验证过程(通过智能卡)。该应用程序是用 C# 编写的,托管在 IIS7 上,面向 Chrome 和 IE8。

问题:

我在让应用程序提示用户输入客户端证书时遇到问题。我一直在 Fiddler 的帮助下调试应用程序。当我在 Fiddler 的用户目录 (C:\Documents and Settings\USER\My Documents\Fiddler2) 中保存了测试客户端证书时,应用程序按预期工作。系统提示我输入保护智能卡的 PIN 码,输入正确后,我会进入登录表单。当我关闭 Fiddler 时,应用程序会引发 403 Forbidden 错误(因为 Fiddler 不再运行并指向其证书)。我无法弄清楚为什么应用程序不会正常提示输入证书。

当前服务器设置:

  • 自签名证书已创建
  • 443 绑定指向自签名证书
  • 启用匿名身份验证
  • 自签名证书被添加到受信任的根 CA 和中间 CA 中(我读到另一个人在这两者中都有它,而不仅仅是受信任的根 CA 并且解决了他们的问题,尽管这两种设置都不适合我们)。
  • 我清除了受信任的根 CA 中我不需要的其余证书(我在其他地方读到,证书过多会导致 SSL 阻塞)。

除了在另一台服务器上从头开始之外,我没有想法尝试。有谁知道问题可能是什么?这似乎应该是相当直截了当的,我错过了一些小事。欢迎任何想法。

更新:

今天花了更多时间处理这个问题后,我坚信这与 IIS7 配置不正确有关(我最初没有设置它)。我认为这是因为我启用了失败的请求跟踪,查看了随后生成的 .xml 文件,并看到抛出了 500 错误。

Chrome 会抛出“拒绝访问网页”消息,而不是“403 - 禁止访问:拒绝访问”。我不知道这是否有帮助。我确实知道,当我不需要证书时,该站点将按预期工作。要求证书是失败的地方。

应用程序池设置为 .Net 4.0 | 经典 | 网络服务。

4

7 回答 7

12

您的问题是浏览器要么没有收到提供客户端证书的请求,要么没有与安全相关的选项来阻止它发生。IE 仅在网站位于正确区域(内联网或受信任的站点)时才提供证书。请在一切之前检查这一点。

如果这没有帮助,请查看此答案以进行下一步。netsh 文档说:

clientcertnegotiation
Optional. Specifies whether the negotiation of certificate is enabled or disabled. Default is disabled.

启用它,即使是最笨的浏览器也应该注意到它应该提供用于身份验证的证书。要进一步诊断您的问题,您可以使用WireShark查看实际的协商。

于 2013-03-03T18:56:53.953 回答
11

尝试openssl s_client -connect yourip:443 -prexit 并查看 CA(您的自签名证书)是否以可接受的客户端证书 CA 名称发送给客户端。

如果没有,则需要先安装 openssl

于 2013-05-24T14:24:25.803 回答
9

在我见过的每个浏览器中,如果浏览器没有任何由服务器信任的 CA 签名的证书,它不会提示您选择证书。因此,请确保您的服务器配置了正确的 CA。正如 Boklucius 建议的那样,您可以使用 openssl 检查服务器发送给客户端的受信任 CA 列表,并查看您签署客户端证书的 CA 是否在其中。

于 2013-07-10T15:02:44.777 回答
4

我会提出“尝试重新启动浏览器”的建议,特别是如果您在浏览器运行时安装了证书。

于 2018-07-10T11:28:23.350 回答
3

添加一个相当痛苦的教训:确保您退出占用端口 443 的 Skype(或任何其他应用程序)。

所以这里的想法是,如果您在同一台机器(客户端和 IIS)上运行开发环境,并且您的团队使用 Skype 或其他一些应用程序进行通信。

当您尝试调试此问题时,请注意时间流逝,似乎一切都“正确”,netsh http sslcerts等等,甚至重新启动但无济于事。好吧,原来 Skype 会吃掉 443,所以把它关掉,然后“噗”地出现你的证书提示。

然后随意向墙上扔东西,大喊脏话或只是“愤怒,愤怒反对光的消亡”。

于 2016-04-15T01:05:09.040 回答
0

在 Firefox 中,如果您在第一次提示您输入证书时按“取消”,并且您将鬼鬼祟祟的“记住此决定”框选中,那么 Firefox 将记住这一点并且不再提供它。

您可以在 Firefox Preferences -> Privacy & Security ( about:preferences#privacy)、View Certificates 中查看和删除您之前记住的决定,并检查 Authentication Decisions 选项卡。

于 2021-11-08T09:16:10.713 回答
0

另外,请确保 Fiddler 不会妨碍您。如果你让它解密 SSL,它会将消息损坏回 IE,并且它没有安装证书,所以它不能提供它。关闭 fiddler,瞧,出现证书提示。

于 2016-05-19T18:03:02.730 回答