注销后WCF客户端安全协商失败

注销后WCF客户端安全协商失败,wcf,certificate,x509certificate,Wcf,Certificate,X509certificate,首先让我承认,这个问题几乎与这个问题完全相同: 但我已经通读了,它不适用 我有一个使用wsHttpBinding的WCF客户端和服务,使用证书和PeerTrust进行身份验证。该服务托管在单独的IIS服务器上。客户机在我的机器上。我安装了正确的证书。我在我的用户帐户下安装并运行所有内容(我在管理员组中)。一切正常 但是,当我晚上注销计算机,早上重新登录并尝试以我自己的身份运行客户端应用程序时,我会出现以下错误: {“证书“[客户端证书]”可能没有能够进行密钥交换的私钥,或者进程可能没有私钥的访

首先让我承认,这个问题几乎与这个问题完全相同:
但我已经通读了,它不适用

我有一个使用wsHttpBinding的WCF客户端和服务,使用证书和PeerTrust进行身份验证。该服务托管在单独的IIS服务器上。客户机在我的机器上。我安装了正确的证书。我在我的用户帐户下安装并运行所有内容(我在管理员组中)。一切正常

但是,当我晚上注销计算机,早上重新登录并尝试以我自己的身份运行客户端应用程序时,我会出现以下错误: {“证书“[客户端证书]”可能没有能够进行密钥交换的私钥,或者进程可能没有私钥的访问权限。有关详细信息,请参阅内部异常。”}
内部异常表示:{“密钥集不存在”}

我可以以管理员的身份运行应用程序,它可以正常工作
但是,如果我使用MMC管理单元删除证书,然后再次导入证书,我可以自己运行客户端,不会出现错误
我可以注销和登录,同样的事情不断发生。直到我删除证书,然后再次导入证书,它才起作用

我在客户端应用程序中做的唯一一件不是“标准”的事情是我没有使用WCF的配置文件。我正在用代码设置一切。但这实际上只涉及到“阅读”证书,所以这不应该有什么区别


所以我的问题是,为什么注销似乎使我自己作为证书的用户无效?这显然会在我分发客户端时产生问题,并且在注销一次后,没有人可以使用该应用程序。

您可以为本地计算机安装证书吗?这将阻止这种行为。

我正在为LocalMachine导入它,但当我这样做时,它也会将它放入CurrentUser。我重新导入了它们,然后从CurrentUser存储中删除了它们,这给了我一个错误。因此,当创建X509Certificate2对象时,它会在CurrentUser存储中查找它。不知道为什么,因为我在创建X509Store时指定了LocalMachine。这就是我正在做的。我正在使用MMC管理单元导入它们。我还注意到,一旦我将它们导入本地机器(并且它也将它们添加到当前用户),如果我从当前用户中删除它们,它也会从本地机器中删除它们。很明显,我在本地机器和当前用户之间的关系上遗漏了一些东西。