【问题标题】:WCF client security negotiation failing after logging off注销后 WCF 客户端安全协商失败
【发布时间】:2011-05-15 06:59:19
【问题描述】:

首先让我承认这个问题与这个问题几乎完全相同: wcf certificate Keyset does not exist problem after reboot
但我已经阅读了它,它不适用。

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

但是,当我在晚上注销机器并在早上重新登录并尝试以我自己的身份运行我的客户端应用程序时,我收到此错误: {“证书‘[客户端证书]’可能没有能够进行密钥交换的私钥,或者进程可能没有私钥的访问权限。请参阅内部异常了解详细信息。”}
内部异常说:{“Keyset 不存在”}

我可以以管理员身份运行该应用程序并且它可以工作。
但是,如果我使用 MMC 管理单元删除,然后再次导入证书,我可以像我自己一样运行客户端,没有错误。
我可以注销和登录,同样的事情不断发生。在我删除之前它不起作用,然后再次导入证书。

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

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

【问题讨论】:

    标签: wcf certificate x509certificate


    【解决方案1】:

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

    【讨论】:

    • 我正在为 LocalMachine 导入它,但是当我这样做时,它也会将它放在 CurrentUser 中。我重新导入它们,然后从 CurrentUser 存储中删除它们,这给了我一个错误。因此,在创建 X509Certificate2 对象时,它会在 CurrentUser 存储中查找它。不知道为什么,因为我在创建 X509Store 时指定了 LocalMachine。
    • 这就是我正在做的。我正在使用 MMC 管理单元来导入它们。我还注意到,一旦将它们导入本地计算机(并将它们也添加到当前用户),如果我从当前用户中删除它们,它也会从本地计算机中删除它们。我显然遗漏了本地机器和当前用户之间的关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2012-03-29
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多