首页 文章

相互证书身份验证失败,错误 403.16

提问于
浏览
14

我正在使用 Windows Server 2012 和 IIS 8.5. 我为网站设置了 SSL,SSL 设置为:Require Required and Require Client Certificates。

我发送给服务器的客户端证书是由 self-signed 权限发出的(我们称之为 MyCompany CA)。 MyCompany CA 证书已成功安装在本地计算机帐户 - 受信任的根证书颁发机构中。它的到期日期是 2039,客户端证书的到期日期也是如此。

但是,通过所有这些设置,我收到错误 403.16 作为结果。我启用了失败请求跟踪规则并设法记录错误请求并获得了一些额外的详细信息:

52.- MODULE_SET_RESPONSE_ERROR_STATUS - 警告 ModuleName - IIS Web 核心通知 - BEGIN_REQUEST HttpStatus - 403 HttpReason - 禁止 HttpSubStatus - 16 ErrorCode - 已处理证书链,但终止于信任提供程序不信任的根证书。 (0x800b0109)ConfigExceptionInfo

我已经检查了多个关于结果 403.16 和错误代码 0x800b0109 的网站,并且所有网站都指向未在本地计算机 - 受信任的根证书颁发机构中安装的证书颁发机构,但这不是我的情况。

谢谢!

3 回答

  • 47

    我已经做了很长时间了,终于找到了!

    将新键添加到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL 值名称:ClientAuthTrustMode 值类型:REG_DWORD 值数据:2

    刷新网页,选择证书并观看魔术发生。

    研究

    使用 Windows 8 和 IIS 8.5 我按照这里的说明http://itq.nl/testing-with-client-certificate-authentication-in-a-development-environment-on-iis-8-5/

    证书是在正确的位置创建的,并且在 IIS 中正确配置了所有内容但我仍然遇到 403.16 错误。

    在许多 MSDN 文章和其他尝试失败后,我找到了以下注册表设置。

    设置 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL 值名称:ClientAuthTrustMode 值类型:REG_DWORD 值数据:2

    设置 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL 值名称:SendTrustedIssuerList 值类型:REG_DWORD 值数据:0(False,或完全删除此键)

    以下是有关此特定设置的更多信息(可在此处找到:http://technet.microsoft.com/en-us/library/hh831771.aspx)

    信任模式的默认值 Schannel 提供程序支持三种客户端身份验证信任模式。信任模式控制如何执行客户端证书链的验证,并且是由 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel 下的 REG_DWORD“ClientAuthTrustMode”控制的 system-wide 设置。

    0 Machine Trust(默认值)要求客户端证书由“受信任的颁发者”列表中的证书颁发。

    1 Exclusive Root Trust 要求客户端证书链接到 caller-specified 受信任颁发者商店中包含的根证书。证书还必须由“受信任的发行人”列表中的颁发者颁发

    2 独占 CA 信任要求客户端证书链指向 caller-specified 受信任颁发者存储中的中间 CA 证书或根证书。有关由受信任颁发者配置问题导致的身份验证失败的信息,请参阅知识库文章 280256。

    希望这对你也有用。

  • 3

    我已经尝试了上面建议的解决方案,它工作正常。

    不涉及编辑注册表的替代解决方案:

    https://support.microsoft.com/en-us/help/2795828/lync-server-2013-front-end-service-cannot-start-in-windows-server-2012

    本文的要点是从本地计算机受信任的根文件夹中删除所有 non-signed 证书。

    如果使用组策略部署证书,请确保“受信任的根证书颁发机构”存储仅包含 self-signed 证书(证书属性“Subject”与证书属性“Issuer”相同的证书)。将任何非 self-signed 证书的证书从受信任的根证书颁发机构存储移动到中间证书颁发机构存储。

    如果手动导入新证书,请确保为 self-signed 证书选择计算机的受信任的根证书颁发机构存储,并为非 self-signed 证书的证书选择计算机的中间证书颁发机构存储。

    您可以使用 Powershell 脚本找到所有 non-self 签名证书:

    Get-Childitem cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject} | Format-List * | Out-File "c:\computer_filtered.txt"
    

    将这些证书移至 mmc 中的中级证书颁发机构文件夹。

  • 1

    我必须重新启动服务器才能应用 ClientAuthTrustMode 设置。

相关问题