背景:
我正在更新一个内部应用程序,将其改为两步验证流程。我想在传统的用户名/密码表单上添加客户端证书认证过程(通过智能卡)。该应用程序使用C#编写,在IIS7上托管,并针对Chrome和IE8进行优化。
问题:
我在获取应用程序提示用户提供客户端证书时遇到了问题。我一直在使用Fiddler调试应用程序。当我在Fiddler的用户目录(C:\Documents and Settings\USER\My Documents\Fiddler2)中保存了一个测试客户端证书时,应用程序按预期工作。我会被提示输入保护智能卡的PIN码,输入正确后,就可以进入登录表单。但是,当我关闭Fiddler时,应用程序会抛出403禁止访问错误(因为Fiddler不再运行并指向其证书)。我还没有找到应用程序为什么不能正常提示证书的原因。
当前服务器设置:
- 创建了自签名证书
- 443绑定指向自签名证书
- 启用匿名身份验证
- 将自签名证书添加到受信任的根CA和中间CA(我读到另一个人在两个地方都有它,而不仅仅是受信任的根CA,这解决了他们的问题,但这两种设置都没有为我们工作)。
- 我清除了不需要的受信任根CA中的其余证书(我在其他地方读到过,拥有太多证书会导致SSL出现故障)。
除了在另一个服务器上从头开始,我已经没有其他尝试的想法。有人知道可能是什么问题吗?这似乎应该是相当简单直接的,我可能缺少一些小东西。欢迎任何想法。
更新:
今天花更多时间研究这个问题后,我强烈认为这与IIS7没有正确配置有关(我最初没有设置它)。我认为这是因为我启用了失败请求跟踪,查看了生成的后续.xml文件,并看到抛出了500错误。
Chrome显示“访问网页被拒绝”的消息,而不是“403-禁止访问:拒绝访问”。我不知道这是否有帮助。我知道当我不需要证书时,该站点将按预期工作。要求证书就会失败。应用程序池设置为.Net 4.0 |经典|网络服务。