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

Jav*_*era 17 iis ssl client-certificates http-status-code-403

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

我发送给服务器的客户端证书是由自签名权限发出的(我们称之为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的站点,并且所有站点都指向未在本地计算机 - 受信任的根证书颁发机构中安装的证书颁发机构,但这不是我的情况.

谢谢!

Bre*_*ett 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"控制的系统范围设置.

0计算机信任(默认)要求客户端证书由"受信任的颁发者"列表中的证书颁发.

1独占根信任要求客户端证书链接到调用者指定的受信任颁发者存储中包含的根证书.证书还必须由"受信任的发行人"列表中的颁发者颁发

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

希望这对你也有用.

  • 在客户端身份验证颁发者存储中添加证书后,我必须重新启动。YMMV。 (3认同)

小智 5

我已经尝试了上面建议的解决方案,并且效果很好。

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

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

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

如果您使用组策略部署证书,请确保受信任的根证书颁发机构存储仅包含自签名证书(证书属性“主题”与证书属性“颁发者”相同的证书)。将任何不是自签名证书的证书从受信任的根证书颁发机构存储移动到中间证书颁发机构存储。

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

您可以使用 Powershell 脚本找到所有非自签名证书:

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

将这些证书移动到 mmc 中的中间证书颁发机构文件夹。