即使ServerCertificateValidationCallback返回true,也“无法为具有权限的SSL / TLS建立安全通道”

我正在与使用带有证书身份validation的传输安全性设置WCF服务(WebHttpBinding)的供应商合作。 我为供应商提供了一个类似的服务,它正常工作,所以我有一个基本的想法,它应该如何工作。

在Windows 7上运行,当我在自己的帐户下使用服务时,一切正常,我得到了回复。 当我在测试帐户下使用它时,我在mscorlib中得到一个例外,它“无法为具有权限XXXX的SSL / TLS建立安全通道”。 如果我将测试帐户添加到内置管理员组,它可以正常工作。

服务器的证书是自签名的,主题字段设置为CN = XXXX,我在个人存储中具有服务器证书,在受信任的根证书颁发机构存储中具有CA证书。

此外,如果我尝试设置System.Net.ServicePointManager.ServerCertificateValidationCallback来打印诊断并返回true,我会得到一些有趣的行为。 在我的帐户下运行,回调被调用两次,然后WCF调用成功。 在测试帐户下运行,它被调用一次,返回,然后我得到上面的例外。

我最好的猜测是,这与测试帐户缺少的某些特权有关,但我不明白Windows如何处理证书以确定无疑,而且我不知道从哪里开始查找。

这是问题的根源:…我在个人存储中具有服务器证书,在受信任的根证书颁发机构存储中具有CA证书。

如果您在测试帐户的个人存储下安装服务器证书,它应该解决它,我认为cmd提示符的命令应该类似于

winhttpcertcfg.exe -g -c LOCALMACHINE \ MY -s“certtype”“testuseraccountname”

或者使用mmc snap in。(我不太确定这有多可靠,我使用上面的工具)

与微软工程师通电话花了几个小时,但问题解决了。 由于这是您看到的一些服务器证书问题的完全相同的错误消息,我认为必须是问题。 事实certificate,测试帐户无权访问客户端证书私钥。 这应该可以使用winhttpcertcfg解析(就像在winhttpcertcfg中访问Windows 7中的iiS用户一样 )