繁体   English   中英

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

[英]HTTP error 403.16 - client certificate trust issue

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

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

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

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

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

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

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)。

就我而言,我一直将根证书添加到服务器上的“当前用户”证书存储中,但出现 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. 单击下一步/单击完成。

我在 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证书。 我删除了它,然后一切正常。

只是分享我在 Windows 2019 服务器和 IISExpress 中结合自签名证书的经验。 我无法通过编辑注册表来使用它,最终我不需要这样做。

以下三个步骤让我到达那里:

  1. 生成的LOCALMACHINE证书存储使用PowerShell根证书: $cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature -Subject "CN=TestRootCert" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\\LocalMachine\\My" -KeyUsageProperty Sign -KeyUsage CertSign

  2. localuser证书存储生成客户端证书,基于 root 证书和 powershell: New-SelfSignedCertificate -Type Custom -Subject "CN=TestChildCert" -Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2","2.5.29.17={text}upn=test@local") -KeyUsage DigitalSignature -KeyAlgorithm RSA -KeyLength 2048 -CertStoreLocation "Cert:\\CurrentUser\\My"

  3. 将根证书从 Personal\\Certificates 移动到 Trusted Root Certification\\Certificates

在此之后,我可以选择 TestChildCert 并且它被接受了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM