启用证书身份验证时获取 401.2

Posted

技术标签:

【中文标题】启用证书身份验证时获取 401.2【英文标题】:Getting 401.2 when certificate authentication is enabled 【发布时间】:2012-03-18 05:49:10 【问题描述】:

我正在设置一个服务器,以便只有映射的证书可以访问网络服务。它设置为要求 SSL/客户端证书、匿名身份验证、asp.net 模拟、表单身份验证和 windows 身份验证都被禁用。启用了一对一的客户端证书映射,并使用适当的用户映射在盒子上设置了证书。当我尝试使用网络服务时,我得到 401.2。如果我启用匿名身份验证,它可以工作,但我不希望任何旧证书能够访问该网站。

我有另一台机器在此配置中禁用了匿名身份验证,并且它可以正常工作。我不确定有什么区别。

【问题讨论】:

你能否澄清这句话:“设置为要求SSL/Client证书,匿名认证,asp.net模拟,forms认证,windows认证都被禁用。”目前尚不清楚您的配置中启用和未启用的内容。另外,您使用的是哪些版本的 IIS、Windows 以及哪些浏览器? @natemrice - 当然可以。 IIS 7,Server 2008,我尝试过 IE 和 Chrome,但由于这是一个 .Net 2.0 WebService,所以访问是专门从一个程序来的。澄清一下:如果您进入 IIS 管理器并单击所需的网站: 1) 在“身份验证”下,您会找到匿名身份验证、ASP.Net 模拟、表单身份验证、Windows 身份验证。只启用了匿名,我想禁用它。 2)单击网站并转到 SSL 设置,我已选中“需要 SSL”,并将客户端证书设置为“需要” 【参考方案1】:

我遇到了同样的问题,但上面的解决方案并没有解决我的问题。我在网站的子目录上配置 IIS 证书身份验证,而不是在网站本身上。

所以,这是错误的:

这是正确的:

将配置移至网站根目录后,一切正常。

我在http://blogs.msdn.com/b/saurabh_singh/archive/2009/06/13/avoid-this-confusion-around-client-certificate-mapping-in-iis-6-0-7-0.aspx找到了解决方案。

【讨论】:

这是我一直在寻找的提示!!我刚刚在 IIS7.5 上尝试过,证书到用户的映射仅适用于站点的根级别。但是您可以对其进行配置并在根目录下将其禁用,然后仅在您需要使用的别名上启用它,而无需重复映射.. 非常感谢!我被这个问题困扰了好几天!【参考方案2】:

您是否从客户端/服务器信任的证书服务器颁发客户端证书?如果您查看证书上的“增强密钥使用”属性,“客户端身份验证”是它的属性之一吗?在 IIS 中,是否安装了客户端证书映射角色(见图 1)?您是否启用了“Client Certificate Mapping”并将用户映射到证书?您需要在此处导入所有客户端证书并将它们映射到用户帐户。在这里配置后,您可以删除所有其他客户端身份验证方法。

【讨论】:

证书是受信任的(顺便说一句,这不可能是问题,因为网站立即拒绝说由于服务器配置(401.2 代码)而无法连接的请求) .在 system.webServer/security/authentication/iisClientCertificateMappingAuthentication 中,enabled 设置为 true,manyToOne..enabled 设置为 true,oneToOne..enabled 设置为 true。 oneToOneMappings 集合中设置了证书。 问题是 2 件事中的 1 件事:1)您仍然打开所有其他身份验证机制,它们应该全部关闭,或者 2)您的客户端映射以某种方式搞砸了。客户端证书与服务器不匹配、用户不正确等【参考方案3】:

问题最终出在调用的软件上,而不是配置中。我奖励 natemrice 赏金,因为他努力回答了最终成为非问题的问题。

edit:有关更多信息,它实际上最终是发送的证书(从本地盒子)与放在 oneToOne 映射中的证书不匹配。通用名称相同,但证书不同(可能第一个已过期),因此证书根本没有被授权。

【讨论】:

以上是关于启用证书身份验证时获取 401.2的主要内容,如果未能解决你的问题,请参考以下文章

使用 netTcpBinding 为 WCF 服务启用基于证书的身份验证

IIS启动失败,启动Windows Process Activation Service时,出现错误13:数据无效 ;HTTP 错误 401.2 - Unauthorized 由于身份验证头无效,您无

iPhone Web 服务通过证书身份验证调用 WCF 服务

在 Kong 中启用基本身份验证和会话插件时如何获取用户 ID?

获取 Firebase 电话身份验证 OTP 时出错

如何获取用于在我的 Rust Tonic 服务中进行身份验证的客户端证书?