Iis HTTP错误403.16-客户端证书信任问题
我正在尝试在IIS 8上实现客户端证书身份验证。我已经在一台开发机器上部署了我的配置,并在那里验证了它是否按预期工作。然而,在服务器上设置之后,每当我导航到站点并被提示输入客户端证书时,我选择它并立即得到403.16错误。失败的请求日志给出错误代码2148204809和消息“已处理证书链,但在信任提供程序不信任的根证书中终止。” 我有一个有效的客户端证书和一个有效的CA证书。CA证书安装在服务器和客户端计算机上计算机帐户的受信任根权限中,客户端证书安装在客户端计算机上当前用户帐户的个人区域中 客户端证书由根CA直接签名,正如我所说的,两者都是有效的。链中没有其他证书,受信任的根权限区域中也没有中间证书 IIS配置已启用sslFlags=SslNegotiateCert和iisClientCertificateMappingAuthentication 服务器未配置为发送CTL,我们已将SendTrustedIssuerList=0Iis HTTP错误403.16-客户端证书信任问题,iis,ssl,certificate,client-certificates,Iis,Ssl,Certificate,Client Certificates,我正在尝试在IIS 8上实现客户端证书身份验证。我已经在一台开发机器上部署了我的配置,并在那里验证了它是否按预期工作。然而,在服务器上设置之后,每当我导航到站点并被提示输入客户端证书时,我选择它并立即得到403.16错误。失败的请求日志给出错误代码2148204809和消息“已处理证书链,但在信任提供程序不信任的根证书中终止。” 我有一个有效的客户端证书和一个有效的CA证书。CA证书安装在服务器和客户端计算机上计算机帐户的受信任根权限中,客户端证书安装在客户端计算机上当前用户帐户的个人区域中 客
我不明白为什么客户端证书不应该被信任。在我的例子中,我一直在将根证书添加到服务器上的“当前用户”证书存储中,并收到403.16错误 将我的根证书添加到本地计算机的受信任根权限存储解决了此问题 在运行IIS的服务器上执行以下步骤 对于Windows Server 2008 R2:
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的经验,以及一个自签名证书。我无法让它与编辑注册表工作,最终我不需要
以下三个步骤让我达到了目的:
$cert=New SelfSignedCertificate-Type Custom-KeySpec Signature-Subject“CN=TestRootCert”-KeyExportPolicy Exportable-HashAlgorithm sha256-keydlength 2048-CertStoreLocation“cert:\LocalMachine\My”-KeyUsageProperty Sign-KeyUsage-CertSign
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”
<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>