我有一些代码调用使用X.509认证保护的第三方Web服务.
如果我直接调用代码(使用单元测试),它可以正常工作.
部署后,将通过WCF服务调用此代码.我添加了第二个调用WCF服务的单元测试,但是当我在第三方Web服务上调用方法时,这个CryptographicException
消息失败了"Keyset does not exist"
.
我认为这是因为我的WCF服务将尝试使用不同的用户自己调用第三方Web服务.
任何人都可以解决这个问题吗?
这很可能是因为IIS用户无权访问证书的私钥.您可以按照以下步骤进行设置...
开始 - >运行 - > MMC
文件 - >添加/删除Snapin
添加证书管理单元
选择计算机帐户,然后点击下一步
选择"本地计算机"(默认),然后单击"完成"
在Console Root的左侧面板上,导航到证书(本地计算机) - >个人 - >证书
您的证书很可能就在这里.
右键单击您的证书 - >所有任务 - >管理私钥
在此处设置您的私钥设置.
它可能是证书上的权限问题.
运行单元测试时,您将在您自己的用户上下文中执行这些操作,这取决于客户端证书所在的商店是否可以访问该证书的私钥.
但是,如果您的WCF服务托管在IIS下,或者作为Windows服务,它可能会在服务帐户(网络服务,本地服务或其他一些受限帐户)下运行.
您需要在私钥上设置适当的权限,以允许该服务帐户访问它.MSDN有详细信息
我昨晚有同样的问题.私钥的权限设置正确,除了Keyset不存在错误外,一切都很好.最后,结果证明证书首先导入当前用户存储,然后移动到本地计算机存储.但是 - 没有移动私钥,这仍然在
C:\ Documents and settngs\Administrator ...
代替
C:\ Documents and settngs \所有用户......
正确设置了密钥的Altough权限,ASPNET无法访问它.当我们重新导入证书以便将私钥放在All users分支中时,问题就消失了.
从IIS浏览时解决"密钥集不存在": 它可能是私有权限
查看并授予权限:
运行> MMC>是
点击文件
单击添加/删除管理单元...
双击证书
电脑帐户
下一个
完
好
单击证书(本地计算机)
点击个人
单击"证书"
给予许可:
右键单击证书名称
所有任务>管理私钥......
添加并授予权限(添加IIS_IUSRS并赋予它权限对我有用)
尝试从Visual Studio运行WCF应用程序时遇到同样的问题.通过以管理员身份运行Visual Studio解决了这个问题.
我遇到过这个问题,我的证书有私钥,但是我收到了这个错误("Keyset不存在")
原因:您的网站在"网络服务"帐户下运行或具有较少的权限.
解决方案:将应用程序池标识更改为"本地系统",重置IIS并再次检查.如果它开始工作它是权限/更少权限问题,您可以模拟然后使用其他帐户.
完全令人沮丧,我遇到了同样的问题并尝试了上述大部分内容.导出的证书正确地具有读取文件的权限C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
,但事实证明它没有该文件夹的权限.添加它,它工作