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

Eri*_*ric 31 iis ssl certificate client-certificates

我正在尝试在IIS 8上实现客户端证书身份验证.我已在开发计算机上部署了我的配置,并验证它在那里按预期工作.但是,在服务器上进行设置后,每当我导航到该站点并提示您输入客户端证书时,我都会选择它并立即收到403.16错误.失败的请求日志提供错误代码2148204809和消息"证书链已处理,但终止于信任提供程序不信任的根证书".

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

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

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

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

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

Aar*_*sen 87

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}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我们将这些非自签名证书移到了中级证书颁发机构(即CA)商店:

Get-Childitem cert:\LocalMachine\root -Recurse | 
    Where-Object {$_.Issuer -ne $_.Subject} | 
    Move-Item -Destination Cert:\LocalMachine\CA
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 很棒的答案!经过数小时的调查,这个答案救了我们的命! (8认同)
  • 伙计,这是我在这个网站上最喜欢的答案。我花了 2 天的时间试图了解客户端证书验证出了什么问题以及为什么我的可信证书无效。问题是我在受信任的根权限中有 1 个非自签名证书。非常感谢!!! (3认同)
  • 非常感谢为第一个场景提供单行诊断和单行修复 - 提供一个已经很好的答案的经典方式。 (2认同)
  • 我希望我能至少投票5次! (2认同)
  • 还需要注意的是,您应该确保您正在查看 LocalMachine 帐户,因为默认情况下 certmgr 使用当前用户打开(您必须在管理模式下使用 MMC 打开它)。 (2认同)

PST*_*PST 5

就我而言,我一直将根证书添加到服务器上的“当前用户”证书存储中,并收到403.16错误。

将我的根证书添加到本地计算机的“受信任的根权限”存储中可以解决此问题。

在运行IIS的服务器上,按照以下步骤操作。

对于Windows Server 2008 R2:

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

对于Windows Server 2012 R2:

  1. 右键单击证书文件,然后选择“安装证书”。
  2. 选择“本地计算机”。点击下一步。
  3. 选择“将所有证书放入以下存储区”,然后单击“浏览...”
  4. 选择“受信任的根证书颁发机构”。单击确定。
  5. 单击下一步/单击完成。

对于Windows 7:

  1. 开始->运行-> mmc.exe
  2. 文件->“添加或删除管理单元”。选择“证书”,单击“添加>”,然后选择“计算机帐户”,然后选择“本地计算机”。单击完成/确定
  3. 展开证书(本地计算机)->受信任的根证书颁发机构->证书。右键单击证书,然后选择所有任务->导入。
  4. 选择证书文件,然后单击下一步。
  5. 选择“将所有证书放入以下存储区”,然后单击“浏览...”
  6. 选中“显示实体店”
  7. 展开“受信任的根证书颁发机构”,然后选择“本地计算机”。单击确定。
  8. 单击下一步/单击完成。