我们有一个ASP.NET MVC4应用程序,其中有一部分应该通过客户端证书加以保护。
当有人想连接到应用程序的这一部分时,浏览器应该要求他们提供客户端证书,一旦他们选择了它,我们的服务器就会获得它,检查它的有效性并显示内容。
好的,我在选择证书部分时遇到了麻烦。在将其设置为视图内容上的一个文件夹之前,我正在尝试在全局应用程序上配置它。
我已将SSL设置为必需,并且还在IIS上的应用配置上设置SSL配置上的客户端证书。
我启用了iisClientCertificateMappingAuthentication(虽然我还没有设置映射)
当我尝试访问Firefox和Chrome的应用时,返回403禁止错误,声明我无法使用提供的凭据访问该应用。
我在本地计算机上安装了客户端证书,并且CA在服务器本地计算机上创建了此证书作为受信任的根证书。
我没有被提示输入证书。 如果我在SSL设置上取消选中客户端证书中的“require”,我可以通过https访问该应用程序。
这是我第一次使用客户端证书,所以它有点令人困惑,也许我没有提供足够的信息。感到有兴趣询问有关评论的进一步信息。
编辑:我已导出客户端证书,将其复制到服务器并在那里进行检查。证书显示为有效,并且证书链中的每个元素似乎都在服务器中被识别。
我也检查了IIS日志,我得到的错误是403.7,因此证书没有发给服务器或者它是无效的。
现在......我已经检查过证书在服务器上是否有效,它是否正确安装在客户端上,但它没有到达服务器或者没有在那里进行过beign验证......我在这里缺少什么?
答案 0 :(得分:0)
好的,最后我发现了问题,它与为受信任的证书颁发机构列表保留的缓冲区大小有关。
查看这篇kb文章: https://support.microsoft.com/en-us/kb/933430
TL DR;要解决此问题,只需在注册表中添加一个新条目: HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制\ SecurityProviders \ SCHANNEL
将SendTrustedIssuerList命名为值为0的DWORD值。
这样,服务器就不会发送受信任的证书颁发机构列表,因此浏览器会向用户显示完整的证书列表。