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

4
我目前正在尝试访问第三方提供的服务。他们向我们颁发了一个PKCS格式的证书。该证书已安装在本地计算机的受信任根目录中。
我们的应用程序在运行时找到此证书并将其发送到由第三方托管的身份验证URL,进行验证并发出SAML令牌。然后使用它来调用实际执行所需功能的服务。
当我通过开发机上的服务引用消费此服务时,一切都很顺利。
现在痛点是,由于我们有一个Citrix环境,测试将在其中进行,因此我们会遇到以下错误:
“SOAP安全协商与“服务URL”的目标失败。内部异常:System.Security.Cryptography.CryptographicException:密钥集不存在。”
有人能帮助我解决这个问题吗?因为我无法在本地重现它,并且它只发生在服务器操作系统中,我不确定这是否与特权或某些代码问题有关。
2个回答

9

此问题可能有两个原因:

  1. 证书没有私钥。
  2. 您的进程运行的用户没有权限读取私钥。

由于您已经在开发环境中成功运行,所以我们假设原因是第2个。

如果您还不知道,需要确定测试服务器上进程运行的用户账户。然后在测试服务器上打开MMC并添加证书控制台。找到证书,右键单击并选择All Tasks|Manage Private Keys...,并授予用户读取权限。

在以下链接中了解更多信息:

X509Certificate - Keyset does not exist

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

加密异常导致的服务故障 - 密钥集不存在

Wcf:密钥集不存在


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接