密钥无法在指定状态下使用

时间:2011-05-30 05:28:21

标签: asp.net security encryption cng

我们正在使用CNG来加密我们的一些敏感数据。作为标准,我们实现SQL集成安全性,而不是使用具有数据库权限的SQL用户。为实现此目的,我们将应用程序池标识定义为具有相应数据库权限的相同Active Directory标识。

现在,问题是当我的AppPool在Local System下运行时,我可以创建&从CNG密钥存储区检索密钥但是,当我将该标识更改为活动目录用户时,当我尝试从CNG商店检索密钥时,我开始收到“密钥无法在指定状态下使用”。以下是我们的一些观察结果:

  • 要在用户级别实施CNG,我们需要能够创建用户级CNG密钥而不是机器密钥。我们已经完成了,用户级别密钥已成功创建,我们可以在UserProfile中看到它 - C:\ Users \ ADusername \ AppData \ Roaming \ Microsoft \ Crypto \ Keys

    • 我们在池设置中设置了“LoadUserProfile = True”。
    • 我们已将AD用户的读取/修改权限授予%windows%\ Microsoft.Net \ Framework \ Asp.Net Temp文件

我们仍然继续收到此错误。任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我知道这是一个较老的问题,但我想我会发布一个建议。我试图在本地IIS上运行现有应用程序,其中应用程序池在AD信号下运行,并且在RSACryptoServiceProvider对象上调用.ToXmlString(true)时遇到了同样的异常。

我解决这个问题的方法只是重新导入我本地计算机上的密钥并检查"将此密钥标记为可导出"复选框。