LNe*_*dza 16 authentication iis-7 client-certificates smartcard windows-server-2008
背景:
我正在将内部应用程序更新为两步验证过程.我想在传统的用户名/密码表单之上添加客户端证书身份验证过程(通过智能卡).该应用程序是用C#编写的,托管在IIS7上,目标是Chrome和IE8.
问题:
我遇到了让应用程序提示用户输入客户端证书的问题.我一直在Fiddler的帮助下调试应用程序.当我在Fiddler的用户目录(C:\ Documents and Settings\USER\My Documents\Fiddler2)中保存测试客户端证书时,应用程序按预期工作.系统提示我输入保护智能卡的PIN码,输入正确后,会将我带到登录表单.当我关闭Fiddler时,应用程序会抛出403 Forbidden错误(因为Fiddler不再运行并指向其证书).我无法弄清楚的是,为什么应用程序不会正常提示证书.
当前服务器设置:
除了在另一台服务器上从头开始尝试之外,我没有想法.有谁知道问题可能是什么?这似乎应该是相当直接的,我错过了一些小事.欢迎任何想法.
更新:
今天花了更多时间处理这个问题后,我坚信它与IIS7没有正确配置有关(我最初没有设置它).我想这是因为我启用了失败的请求跟踪,查看了生成的后续.xml文件,并看到引发了500错误.
Chrome正在抛出"访问网页被拒绝"消息,而不是"403 - 禁止访问:访问被拒绝".我不知道这是否有帮助.我知道,当我不需要证书时,该网站将按预期工作.要求证书是失败的地方.
应用程序池设置为.Net 4.0 | 经典| 网络服务.
use*_*176 11
您的问题是浏览器既没有获得提供客户端证书的请求,也没有安全相关的选项来阻止它发生.仅当网站位于正确的区域(Intranet或可信站点)时,IE才会提供证书.一切都要检查一下.
如果这没有帮助,那么请看下一步的答案.netsh文档说:
clientcertnegotiation
Optional. Specifies whether the negotiation of certificate is enabled or disabled. Default is disabled.
Run Code Online (Sandbox Code Playgroud)
启用它,甚至最愚蠢的浏览器应该注意到它应该提供身份验证证书.要进一步诊断问题,您可以使用WireShark查看正在进行的协商.
尝试openssl s_client -connect yourip:443 -prexit
查看CA(您的自签名证书)是否以可接受的客户端证书CA名称发送到客户端.
如果你没有openssl,你需要先安装openssl
在我看过的每个浏览器中,如果没有服务器信任的CA签署的任何证书,浏览器将不会提示您选择证书.因此,请确保您的服务器配置了正确的CA. 正如Boklucius建议的那样,您可以使用openssl检查服务器发送给客户端的可信CA列表,并查看您是否已签署客户端证书的CA.
| 归档时间: |
|
| 查看次数: |
51934 次 |
| 最近记录: |