背景:
我正在将内部应用程序更新为两步验证过程。我想在传统的用户名/密码表单之上添加一个客户端证书身份验证过程(通过智能卡)。该应用程序是用 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 | 经典 | 网络服务。