2010-11-24 165 views
1

后没有让我先承认,这个问题几乎是完全一样的,因为这一个: wcf certificate Keyset does not exist problem after reboot
但我已经通过阅读,它是不适用的。WCF客户端安全协商注销

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

但是,当我注销我的机器过夜并在早上重新登录并尝试运行我的客户端应用程序时,出现此错误: {“证书可能'[客户端证书]'可能没有可以进行密钥交换的私钥,或者该进程可能没有私钥访问权限,请参阅内部例外以了解详细信息。“}
内部例外说:{”Keyset does not exist“}

我可以以管理员身份运行该应用程序,它可以工作。
但是,如果我使用MMC管理单元进行删除,然后再次导入证书,我可以在没有错误的情况下自行运行客户端。
我可以注销,同样的事情不断发生。除非我删除,否则它不起作用,然后再次导入证书。

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

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

回答

0

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

+0

我正在为LocalMachine导入它,但是当我这样做时,它也会将它放入CurrentUser中。我重新导入它们,然后从CurrentUser商店中删除它们,它给我一个错误。所以当创建X509Certificate2对象时,它正在CurrentUser存储中查找它。不知道为什么,因为我在创建X509Store时指定了LocalMachine。 – Marcus 2010-11-29 14:59:17