使用证书调用服务:错误 - “密钥集不存在”

时间:2017-03-25 05:34:33

标签: c# wcf security service certificate

我目前正在尝试访问第三方提供的服务。他们向我们颁发了PKCS格式的证书。证书安装在本地计算机 - 受信任的根目录中。

我们在运行时的应用程序找到此证书并将其发送到第三方托管的身份验证URL,在该身份验证URL进行身份验证并发出SAML令牌。然后,这用于调用实现我们所需功能的实际服务。

当我通过开发机器[Windows 7]中的服务引用运行我的应用程序来使用此服务时,一切运行顺利。

现在的痛点是因为我们有一个Citrix环境会进行测试,我们会收到错误

  

METHOD中的例外:使用“服务URL”进行SOAP安全协商   目标失败。内在例外:   System.Security.Cryptography.CryptographicException:Keyset没有   存在。

任何人都可以帮我解决这个问题,因为我无法在本地重现它,它只发生在服务器操作系统中,我不确定它是否存在特权或某些代码问题。

2 个答案:

答案 0 :(得分:4)

此问题可能有两个原因:

  1. 证书没有私钥。
  2. 您的进程运行的用户没有读取私钥的权限。
  3. 因为你已经有了这个&在您的开发环境中运行,假设原因是2。

    如果您还不知道,则需要确定您的流程在测试服务器上运行的用户帐户。然后在测试服务器上打开MMC并add the Certificates snap-in。找到证书,右键单击并选择All Tasks | Manage Private Keys...并授予用户读取权限。

    在以下网址阅读更多相关内容:

    X509Certificate - Keyset does not exist

    CryptographicException 'Keyset does not exist', but only through WCF

    Service failure with CryptographicException – Keyset does not exist

    Wcf: Keyset does not exist

答案 1 :(得分:1)

感谢您提供的信息。此问题的根本原因是证书的权限问题。由于证书安装在具有管理员权限的服务器中,因此必须授予所有用户访问证书的权限。