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

Iis HTTP错误403.16-客户端证书信任问题,iis,ssl,certificate,client-certificates,Iis,Ssl,Certificate,Client Certificates,我正在尝试在IIS 8上实现客户端证书身份验证。我已经在一台开发机器上部署了我的配置,并在那里验证了它是否按预期工作。然而,在服务器上设置之后,每当我导航到站点并被提示输入客户端证书时,我选择它并立即得到403.16错误。失败的请求日志给出错误代码2148204809和消息“已处理证书链,但在信任提供程序不信任的根证书中终止。” 我有一个有效的客户端证书和一个有效的CA证书。CA证书安装在服务器和客户端计算机上计算机帐户的受信任根权限中,客户端证书安装在客户端计算机上当前用户帐户的个人区域中 客

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

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

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

IIS配置已启用sslFlags=SslNegotiateCert和iisClientCertificateMappingAuthentication

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


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

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

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

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

对于Windows Server 2008 R2:

  • 右键单击证书文件并选择“安装证书”。单击下一步
  • 选择“将所有证书放入以下存储”并单击“浏览…”
  • 选中“显示实体存储”
  • 展开“受信任的根证书颁发机构”并选择“本地计算机”。单击“确定”
  • 单击下一步/单击完成
  • 对于Windows Server 2012 R2:

  • 右键单击证书文件并选择“安装” 证书'
  • 选择“本地计算机”。单击下一步
  • 选择“将所有证书放入以下存储”并单击“浏览…”
  • 选择“受信任的根证书颁发机构”。单击“确定”
  • 单击下一步/单击完成
  • 对于Windows 7:

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

  • Windows 2012引入了更严格的证书存储验证。根据,受信任的根证书颁发机构(即根)存储只能具有自签名的证书。如果该存储包含非自签名证书,则IIS下的客户端证书身份验证将返回403.16错误代码

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

    Get-Childitem cert:\LocalMachine\root -Recurse | 
        Where-Object {$_.Issuer -ne $_.Subject}
    
    在我的情况下,我们将这些非自签名证书移动到中间证书颁发机构(即CA)存储:

    根据,您可能还拥有过多的受信任证书

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


    这种情况下的解决方案是删除您不信任的任何证书颁发机构证书,或者(默认值,如果不存在,则为1)。

    我在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>
    
    
    模块设置响应错误状态
    请求通知
    开始请求
    已处理证书链,但在信任提供程序不信任的根证书中终止。
    (0x800b0109)
    

    当我安装
    razersynapse
    时,安装还将
    chromasdk.io
    的证书放在可信根证书颁发机构的计算机帐户->本地计算机下。我删除了这个,然后一切都正常了。

    只是分享了我使用Windows 2019 server和IISExpress的经验,以及一个自签名证书。我无法让它与编辑注册表工作,最终我不需要

    以下三个步骤让我达到了目的:

  • 使用powershell为localmachine证书存储生成根证书:
    $cert=New SelfSignedCertificate-Type Custom-KeySpec Signature-Subject“CN=TestRootCert”-KeyExportPolicy Exportable-HashAlgorithm sha256-keydlength 2048-CertStoreLocation“cert:\LocalMachine\My”-KeyUsageProperty Sign-KeyUsage-CertSign

  • 基于powershell的根证书,为localuser证书存储生成客户端证书:
    newselfsignedcertificate-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”

  • 将根证书从Personal\Certificates移动到Trusted root Certific
    <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>