SChannel“在 LocalMachine 或 CurrentUser 存储中找不到证书”

SChannel“在 LocalMachine 或 CurrentUser 存储中找不到证书”

我们有一个内部应用程序,需要使用客户端 SSL 证书来与远程服务器(不受我们的控制)进行身份验证。

以前这种方法没有出现问题,但在部署到新服务器时,我们在让 Windows 2008 使用证书时遇到了问题。

该证书以包含私钥的 .pfx 文件形式存在。LocalMachine 存储中也存在相同的证书,并且同样包含其私钥。我们已通过在 IIS 中针对该证书创建网站来确保 LocalMachine 存储中的证书正确无误,因此我们很高兴证书、证书链和私钥有效。

PFX 已通过从证书 MMC 管理单元导出而创建。

问题是我们在系统诊断日志中收到以下内容,表明它找不到私钥:

System.Net Information: 0 : [5988] SecureChannel#23264094 – Locating the private key for the certificate: [Subject]
CN=internal-server.company.com, OU=Servers, OU=Devices, O=org

[Issuer]
CN=SubCA02, OU=CA, o=org

[Serial Number]
407ABCDE

[Not Before]
31/10/2013 11:08:48 AM

[Not After]
31/10/2016 11:08:48 AM

[Thumbprint]
4354A34F6004F019E60F055979A47E50F62D1504
.
System.Net Information: 0 : [5988] SecureChannel#23264094 – Cannot find the certificate in either the LocalMachine store or the CurrentUser store.

我已经使用 LocalMachine 存储中的证书验证了日志中列出的指纹、颁发者和序列号,并且它们已经匹配。

通过大量搜索,我了解到这似乎是权限问题。运行应用程序的用户已被授予访问私钥的权限(个人证书 -> 右键单击​​证书 -> 所有任务 -> 管理私钥),所以我现在不知道是哪个权限导致了这个问题。

更新

  • 我们已将应用程序用户添加到“管理员”组,重新启动服务器,然后重试。问题仍然存在。

  • 我们已经启用了 SChannel 调试(按照http://support.microsoft.com/kb/260729)。系统事件日志报告以下警告:

    远程服务器已请求 SSL 客户端身份验证,但找不到合适的客户端证书。将尝试匿名连接。此 SSL 连接请求可能成功或失败,具体取决于服务器策略设置。

  • 没有引发 .NET 访问被拒绝异常;本质上 SChannel 正在回退到不提供客户端证书。这已通过 Wireshark 跟踪得到验证,在远程端强制 TCP 重置之前,证书计数显示为零。

相关内容