无法打开 RSA 密钥容器
Posted
技术标签:
【中文标题】无法打开 RSA 密钥容器【英文标题】:The RSA key container could not be opened 【发布时间】:2011-02-24 16:21:52 【问题描述】:我一直在一台运行 XP home 的旧机器上开发一个 ASP.NET 站点。我最近买了一台新的 Win 7 PC,并把我所有的项目文件都转移了。当我尝试运行该项目时,我收到以下错误消息:
"Failed to decrypt using provider 'MyRsaProtectedConfigurationProvider'. Error message from the provider: The RSA key container could not be opened."
我意识到我使用RSA encryption
加密了部分 web.config 文件。这就是现在的问题所在。我不确定如何让该密钥再次工作,以便我可以在我的新机器上使用它。我从旧机器导出密钥并使用以下命令导入:
aspnet_regiis -pi "RSAProviderName" "C:\RSA_configkey.xml"
已成功导入。然后我运行了该项目,但出现了相同的错误消息。我想这可能是一个许可的事情,所以我跑了:
aspnet_regiis -pa "RSAProviderName" "\Desktop" -full
这也是成功的,但我仍然得到错误。通过阅读,我看到人们使用“ASPNET”而不是“\Desktop”(Desktop 是我的机器名称)。但是,当我尝试使用“ASPNET”时,我得到:
No mapping between account name and security IDs was done. <Exception from HRESULT = 0x80070534
在解决此问题之前,我无法处理该项目,因此非常感谢您提供任何帮助。 谢谢!
【问题讨论】:
【参考方案1】:如果您仍然可以访问旧机器,您可以随时解密该机器上的配置部分,然后将未加密的配置文件复制到新机器(如有必要,重新加密旧机器上的文件) .
在 Windows 7 上,默认运行 IIS 应用程序池的帐户可能是 ApplicationPoolIdentity(相对于 ASPNET)。要授予权限,请尝试以下操作:
aspnet_regiis -pa RSAProviderName "IIS APPPOOL\DefaultAppPool" -full
顺便说一句,如果您决定坚持将密钥从旧机器复制到新机器,则应确保在导出时也导出私钥数据:
aspnet_regiis -px RSAProviderName C:\RSA_configkey.xml -pri
并且,可选地,在导入期间使密钥数据可导出:
aspnet_regiis -pi RSAProviderName C:\RSA_configkey.xml -exp
【讨论】:
感谢您的帮助。我应该可以在接下来的一个小时内访问旧机器,所以会尝试这种方法。附带说明一下,重置我授予的权限(例如\desktop
)的最佳方法是什么?不太重要,因为我是这台机器的唯一用户,但可能会更好。
谢谢,问题解决了!
不客气。要撤消权限,您可以通过-pr
开关再次使用aspnet_regiis。或者,找到C:\Users\All Users\Microsoft\Crypto\RSA\MachineKeys
下的文件并通过Windows更改权限。
再次感谢戴夫,帮了大忙 :)
可能很明显,但如果有人没有注意到它.. 你可以看到网站在哪个应用程序池下运行。从那里您可以检查应用程序池以查看它在哪个用户下运行。如果它说“ApplicationPoolIdentity”,这应该很好用。如果您没有使用“DefaultAppPool”,那么您可以将该名称更改为您正在使用的应用程序池的名称,即。 “IIS APPPOOL\MYAPPPOOL”。【参考方案2】:
我遇到了同样的问题,但是使用管理员运行命令提示符/powershell 解决了这个问题。
【讨论】:
以上是关于无法打开 RSA 密钥容器的主要内容,如果未能解决你的问题,请参考以下文章
无法将 WebCrypto 密钥对转换为 Java RSA 密钥
使用 PuTTY 进行身份验证时,“无法使用密钥文件“...\id_rsa”(OpenSSH SSH-2 私钥)”[关闭]
为啥我无法使用 PEM_read_RSAPublicKey 读取 openssl 生成的 RSA pub 密钥?