浏览器未提示输入客户端证书

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不再运行并指向其证书).我无法弄清楚的是,为什么应用程序不会正常提示证书.

当前服务器设置:

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

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

更新:

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

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

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

use*_*176 11

您的问题是浏览器既没有获得提供客户端证书的请求,也没有安全相关的选项来阻止它发生.仅当网站位于正确的区域(Int​​ranet或可信站点)时,IE才会提供证书.一切都要检查一下.

如果这没有帮助,那么请看下一步的答案.netsh文档说:

clientcertnegotiation
Optional. Specifies whether the negotiation of certificate is enabled or disabled. Default is disabled.
Run Code Online (Sandbox Code Playgroud)

启用它,甚至最愚蠢的浏览器应该注意到它应该提供身份验证证书.要进一步诊断问题,您可以使用WireShark查看正在进行的协商.


Bok*_*ius 9

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

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

  • @RanPaul我知道这已经很晚了,但是如果您使用的是Windows计算机,请注意OpenSSL无法识别Windows证书存储。因此,您需要提供-CApath或-CAfile。下载[Mozilla的.PEM文件](https://curl.haxx.se/docs/caextract.html),或从所需的链中创建自己的文件。确保还安装[最新版本的OpenSSL](https://slproweb.com/products/Win32OpenSSL.html)。 (2认同)

pim*_*ttc 5

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