当前位置: 首页 > 知识库问答 >
问题:

HTTP错误403.16-客户端证书信任问题

劳仲渊
2023-03-14

我正在尝试在IIS 8上实现客户端证书身份验证。我已经在一台开发机器上部署了我的配置,并在那里验证了它是否按预期工作。然而,在服务器上设置之后,每当我导航到该站点并被提示输入客户端证书时,我选择它并立即得到403.16错误。失败的请求日志给出错误代码2148204809,并显示消息“已处理证书链,但在信任提供程序不信任的根证书中终止。”

我有一个有效的客户端证书和一个有效的CA证书。CA证书安装在服务器和客户端计算机上的计算机帐户的受信任根权限中,客户端证书安装在客户端计算机上当前用户帐户的个人区域中。

客户端证书由根CA直接签名,正如我所说的,两者都是有效的。链中没有其他证书,受信任的根权限区域中也没有中间证书。

IIS配置已启用sslFlags=SslNegotiateCert和iisClientCertificateMappingAuthentication。

服务器没有配置为发送CTL,我们有SendTrustedIssuerList=0。

我不明白为什么不应该信任客户端证书。

共有3个答案

卢才艺
2023-03-14

我在IIS Express中遇到以下错误:

HTTP错误403.16-禁止

您的客户端证书不受信任或无效。

查看TraceLogFiles我看到了以下错误:

<RenderingInfo Culture="en-US">
 <Opcode>MODULE_SET_RESPONSE_ERROR_STATUS</Opcode>
 <Keywords>
  <Keyword>RequestNotifications</Keyword>
 </Keywords>
 <freb:Description Data="Notification">BEGIN_REQUEST</freb:Description>
 <freb:Description Data="ErrorCode">A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
(0x800b0109)</freb:Description>
</RenderingInfo>

原来当我安装Razer Synapse时,安装还将可信根认证机构中的chromasdk.io证书放在计算机帐户下-

姬安志
2023-03-14

在我的例子中,我一直在将根证书添加到服务器上的“当前用户”证书存储中,结果出现了403.16错误。

将我的根证书添加到本地计算机的受信任根权限存储解决了该问题。

在运行IIS的服务器上执行以下步骤。

对于Windows Server 2008 R2:

  1. 右键单击证书文件并选择安装证书。单击下一步。
  2. 选择将所有证书放置在以下存储中,然后单击浏览...
  3. 选中显示实体商店
  4. 展开受信任的根证书颁发机构并选择本地计算机。单击OK.
  5. 单击下一步/单击完成。

对于Windows Server 2012 R2:

  1. 右键单击证书文件并选择“安装证书”

对于Windows 7:

  1. 开始-
米嘉禧
2023-03-14

Windows 2012引入了更严格的证书存储验证。根据KB 2795828:Lync Server 2013前端服务无法在Windows Server 2012中启动,受信任的根证书颁发机构(即根)存储只能具有自签名的证书。如果该存储包含非自签名证书,则IIS下的客户端证书身份验证将返回403.16错误代码。

要解决这个问题,必须从根存储中删除所有非自签名证书。此PowerShell命令将标识非自签名证书:

Get-Childitem cert:\LocalMachine\root -Recurse | 
    Where-Object {$_.Issuer -ne $_.Subject}

在我的情况下,我们将这些非自签名证书移动到了中间认证机构(即CA)存储:

Get-Childitem cert:\LocalMachine\root -Recurse | 
    Where-Object {$_.Issuer -ne $_.Subject} | 
    Move-Item -Destination Cert:\LocalMachine\CA

根据KB 2801679:安装KB 931125后的SSL/TLS通信问题,您也可能有太多受信任的证书。

[T]Schannel安全包支持的可信证书颁发机构列表的最大大小为16千字节(KB)。拥有大量第三方根认证机构将超过16k限制,您将遇到TLS/SSL通信问题。

这种情况下的解决方案是删除任何您不信任的证书颁发机构证书,或者通过将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\@SendTrustedIssuerList注册表项设置为0(如果不存在,默认值为1),停止发送受信任认证机构列表。

 类似资料:
  • null 有人能帮帮我吗?谢谢。 代码 斯塔克特莱斯

  • 我试图自动化Web服务,并以字符串的形式传递XML,然后将其转换为字符串实体并设置实体。但我不知道为什么会抛出400错误。我是WebServices Automation的新手,请在这方面帮助我。 以下是我的代码:

  • 问题内容: 我还很陌生,对于使用证书进行身份验证时客户端应该显示的内容有些困惑。 我正在编写一个Java客户端,该客户端需要对POST特定对象进行简单的数据处理URL。那部分工作正常,唯一的问题是应该完成。该部分相当容易处理(无论是使用Java的内置HTTPS支持还是使用Java的内置支持),但是我一直坚持使用客户端证书进行身份验证。我注意到这里已经存在一个非常类似的问题,我还没有尝试使用我的代码

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 我正在使用节点0.10.26,并试图通过客户端验证建立https连接。 服务器代码: 客户代码: 我使用以下命令创建了证书,每次都将“uname-n”的结果作为“Common Name”提供: 我已经使用客户端和服务器证书的所有组合(即:[(server1,client1),(server1,client2),(server2,client1),(server2,client1),(server2

  • 本文向大家介绍什么是客户端证书?相关面试题,主要包含被问及什么是客户端证书?时的应答技巧和注意事项,需要的朋友参考一下 客户端系统向远程服务器发出经过身份验证的请求所用的数字证书被称为客户端证书。客户端证书在许多相互认证设计中起着非常重要的作用,为请求者的身份提供了强有力的保证。