我们有一个内部应用程序,需要使用客户端SSL证书来validation远程服务器(不在我们的控制下)。
这之前没有任何问题,但部署到新的服务器,我们有问题让Windows 2008使用证书。
证书作为包含私钥的.pfx文件存在。 LocalMachine存储中存在相同的证书,并使用其私钥。 我们通过在IIS中创build一个针对该证书的网站来确保LocalMachine商店中的网站是正确的,所以我们很高兴证书,证书链和私钥是有效的。
PFX是通过从证书MMCpipe理单元中导出而创build的。
问题是我们在系统诊断日志中得到以下信息,表明它找不到私钥:
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商店中的证书validation了日志中列出的指纹,发行者和序列号,并且这些都结婚了。
从我可以告诉大量search,这似乎是一个权限问题。 用户应用程序正在运行,因为它已被授予访问私钥(个人证书 – >右键单击证书 – >所有任务 – >pipe理私钥),所以我现在不知道哪个权限)这可能是造成这个问题的原因。
更新
我们已经将应用程序用户添加到“pipe理员”组,重新启动服务器,然后再次尝试。 问题依然存在。
我们启用了SChanneldebugging(按照http://support.microsoft.com/kb/260729 )。 系统事件日志报告以下警告:
远程服务器已请求SSL客户端身份validation,但没有find合适的客户端证书。 将尝试匿名连接。 此SSL连接请求可能成功或失败,具体取决于服务器策略设置。
没有.NET访问被拒绝的exception提出; SChannel的本质是回落到不提供客户端证书。 这已通过Wireshark跟踪进行validation,在远程端强制执行TCP重置之前显示证书计数为零。