【问题标题】:Key not valid for use in specified state errror when getting private key获取私钥时,Key not valid for use in specified state 错误
【发布时间】:2016-01-27 22:54:00
【问题描述】:

我有一个 由 Windows 服务托管的 wcf 服务。我们使用通过 RSA 算法加密的私人证书对密码进行加密。以用户 A 远程登录时,证书(pfx 文件)安装在服务器上。应用程序抛出异常“Key not valid for use in specified state”它试图获取私钥。 windows服务在账户本地系统下运行。当在程序集中调用解密函数时,它在帐户 A 下运行(模拟用于 wcf 服务中的不同调用)。服务器是 64 位 Windows Server 2008 R2。相同的代码适用于安装在 Windows Server 2012 服务器上的其他应用程序中的解密。

我已经完成了以下操作,但最终得到相同的错误消息:

  1. 再次安装证书(在 certmgr.msc 中卸载证书,在 Crypto 文件夹中删除密钥集,检查我收到不同的错误消息(密钥集不可用),重新启动服务器,重新安装相同的证书,重新启动服务器)。
  2. 已删除 Crypto 文件夹,重新安装证书。
  3. 我信任整个系统的证书(请参阅:https://superuser.com/questions/370217/trust-ssl-certificate-to-local-system-account
  4. 我已将运行 Windows 服务的用户更改为帐户 A。 我已经使用以下命令检查了用户 A 是否可以访问私钥:winhttpcertcfg -l -c CURRENT_USER\MY MyCertificate。
  5. 要解密的字符串长度与其他应用程序中使用的长度相同,我们没有这个问题,所以我们认为它与长度无关(字符串长度为 137)。此外,我们特别知道它无法获取私钥。 (参考:https://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.encrypt.aspx(fOAEP设置为false)
  6. 我在以用户 A 远程登录的服务器上创建了一个具有不同名称的新证书。
  7. 我已检查域、程序集和 mscorlib 是否完全受信任

需要专家帮助!我可以使用没有证书的旧加密,但这并不安全。花了这么多时间却没有任何结果真是令人沮丧……

最好的问候,克里斯汀。

【问题讨论】:

    标签: wcf cryptography rsa


    【解决方案1】:

    我自己通过创建一个小型应用程序来解决这个问题,该应用程序只执行我在 wcf 服务中的代码失败的特定事情。每次它工作时,我都会增加一些复杂性。通过这种方式,我发现 wcf 服务必须以上述用户 A 的身份运行。此外,我发现它可以在没有模拟 WCFService 的一些要求的情况下工作。对于每个服务方法,我都有这个属性: [操作行为(模拟 = ImpersonationOption.Required)]。我仍然使用调用此 WCFService 的应用程序的模拟(因为 WCF 服务在域 X 中,而调用它的应用程序在域 Y 中),但是当我删除属性时它可以工作。

    克里斯汀:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2022-09-06
      • 1970-01-01
      • 2013-03-12
      • 2017-02-03
      • 1970-01-01
      相关资源
      最近更新 更多