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

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:密钥集不存在

win10 iis配置 出现密钥集不存在的错误

密钥集不存在怎样解决?

System.Security.Cryptography.CryptographicException,密钥集不存在

System.Security.Cryptography.CryptographicException:在 Visual Studio 中抛出的密钥集不存在

使用 Nodejs 调用需要证书的 SOAP 服务