使用证书调用服务:错误 - “密钥集不存在”
Posted
技术标签:
【中文标题】使用证书调用服务:错误 - “密钥集不存在”【英文标题】:Calling service using certificate :Error - "Keyset does not exist" 【发布时间】:2017-08-18 04:27:23 【问题描述】:我目前正在尝试访问由第 3 方提供的服务。他们已向我们颁发了 PKCS 格式的证书。证书安装在本地计算机 - 受信任的根目录中。
我们的应用程序在运行时找到此证书并将其发送到由第 3 方托管的身份验证 URL,在那里对其进行身份验证并颁发 SAML 令牌。然后使用它来调用执行我们想要的功能的实际服务。
当我通过开发机器 [Windows 7] 中的服务引用运行使用此服务的应用程序时,一切正常。
现在的痛点是,因为我们有一个将进行测试的 Citrix 环境,所以我们收到一个错误,因为
方法中的异常:与“服务 URL”的 SOAP 安全协商 目标失败。内部异常: System.Security.Cryptography.CryptographicException:密钥集没有 存在。
谁能帮我解决这个问题,因为我无法在我的本地重现它并且它只发生在服务器操作系统中,我不确定它是权限问题还是某些代码问题。
【问题讨论】:
【参考方案1】:这个问题有两个可能的原因:
-
证书没有私钥。
运行您的进程的用户没有读取私钥的权限。
由于您已经在您的开发环境中启动并运行它,我们假设原因是 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
【讨论】:
【参考方案2】:感谢您的信息。此问题的根本原因是证书的权限问题。由于证书安装在具有管理员权限的服务器中,因此必须授予所有用户访问证书的权限。
【讨论】:
以上是关于使用证书调用服务:错误 - “密钥集不存在”的主要内容,如果未能解决你的问题,请参考以下文章
System.Security.Cryptography.CryptographicException:密钥集不存在
System.Security.Cryptography.CryptographicException,密钥集不存在
System.Security.Cryptography.CryptographicException:在 Visual Studio 中抛出的密钥集不存在