我试图在IIS 8上实现客户端证书身份验证。我已经在开发计算机上部署了我的配置,并验证了它在那里按预期工作。但是,在服务器上设置后,每当我导航到网站并提示输入客户端证书时,我选择它并立即得到403.16错误。失败的请求日志给出错误代码2148204809和消息“A certificate chain processed,但终止于信任提供者不信任的根证书。”
我有一个有效的客户端证书和一个有效的CA证书。CA证书安装在服务器和客户端计算机上的计算机帐户的受信任根权限中,客户端证书安装在客户端计算机上的当前用户帐户的个人区域中。
客户端证书由根CA直接签名,正如我所说,两者都是有效的。链中没有其他证书,并且在Trusted Root Authorities区域中没有中间证书。
IIS配置具有sslFlags = SslNegotiateCert并且启用了iisClientCertificateMappingAuthentication。
服务器未配置为发送CTL,我们的SendTrustedIssuerList = 0。
我不明白为什么客户端证书不应该被信任。
4条答案
按热度按时间1cklez4t1#
Windows 2012引入了更严格的证书存储验证。根据KB 2795828: Lync Server 2013 Front-End service cannot start in Windows Server 2012,受信任的根证书颁发机构(即根)存储只能具有自签名的证书。如果该存储包含非自签名证书,IIS下的客户端证书身份验证将返回403.16错误代码。
要解决此问题,您必须从根存储中删除所有非自签名证书。此PowerShell命令将识别非自签名证书:
字符串
在我的情况下,我们将这些非自签名证书移到中间证书颁发机构(即CA)存储中:
型
根据KB 2801679: SSL/TLS communication problems after you install KB 931125,您还可能拥有太多的受信任证书。
[T]he Schanner安全包支持的受信任证书颁发机构列表的最大大小为16 KB。拥有大量的第三方根证书颁发机构将超过16 k的限制,并且您将遇到TLS/SSL通信问题。
这种情况下的解决方案是删除任何您不信任的证书颁发机构证书,或to stop sending the list of trusted certifiation authorities by setting the
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\@SendTrustedIssuerList
registry entry to 0(如果不存在,默认值为1)。如果执行上述步骤后问题仍然存在,请重新启动机器。
p5fdfcr12#
在我的例子中,我一直在将根证书添加到服务器上的“当前用户”证书存储中,并得到403.16错误。
将我的根证书添加到本地计算机的受信任的根颁发机构存储解决了这个问题。
在运行IIS的服务器上执行以下步骤。
对于Windows Server 2008 R2:
1.右键单击证书文件并选择“安装证书”。单击下一步。
1.选择“将所有证书放入以下存储”,然后单击“浏览...”
1.检查“显示实体店”
1.展开“受信任的根证书颁发机构”并选择“本地计算机”。单击“确定”。
1.单击下一步/单击完成。
对于Windows Server 2012 R2:
1.右键单击证书文件并选择“安装证书”。
1.选择“本地计算机”。单击下一步。
1.选择“将所有证书放入以下存储”,然后单击“浏览...”
1.选择“受信任的根证书颁发机构”。单击“确定”。
1.单击下一步/单击完成。
对于Windows 7:
1.开始->运行-> mmc.exe
1.文件->“添加或删除管理单元”。选择“证书”,单击“添加>”,然后选择“计算机帐户”和“本地计算机”。单击完成/确定
1.展开证书(本地计算机)->可信根证书颁发机构->证书。右键单击证书并选择所有任务->导入。
1.选择证书文件并单击下一步。
1.选择“将所有证书放入以下存储”,然后单击“浏览...”
1.检查“显示实体店”
1.展开“受信任的根证书颁发机构”并选择“本地计算机”。单击“确定”。
1.单击下一步/单击完成。
gab6jxml3#
我在IIS Express中遇到了这个错误:
HTTP错误403.16
您的客户端证书不受信任或无效。
查看
TraceLogFiles
,我看到以下错误:字符串
原来当我安装
Razer Synapse
时,安装还在计算机帐户->本地计算机下的受信任根证书颁发机构中放置了chromasdk.io
的证书。我删除了这个,然后一切正常。hsgswve44#
只是分享我的经验与Windows 2019服务器和IISExpress结合自签名证书.我不能让它工作编辑注册表,最后我不需要.
以下三个步骤让我做到了这一点:
1.使用powershell为localmachinecert存储生成根证书:
$cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature -Subject "CN=TestRootCert" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\LocalMachine\My" -KeyUsageProperty Sign -KeyUsage CertSign
1.基于根证书为localusercert存储区生成客户端证书,并使用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"
1.将根证书从Personal\Certificates移动到Trusted Root Certification\Certificates
在此之后,我可以选择TestChildCert,它被接受了。