4

我们正在使用 CNG 加密我们的一些敏感数据。作为标准,我们实现了 SQL 集成安全性,而不是使用具有 DB 权限的 SQL 用户。为了实现这一点,我们将应用程序池标识定义为相同的 Active Directory 标识,该标识被授予适​​当的 DB 权限。

现在,问题是当我的 AppPool 在本地系统下运行时,我可以从 CNG 密钥存储中创建和检索密钥,但是,当我将该身份更改为活动目录用户时,我开始收到“密钥在指定状态下无效”我正在尝试从 CNG 商店检索密钥。以下是我们的一些观察:

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

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

我们仍然继续收到此错误。任何帮助将不胜感激。

4

1 回答 1

1

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

他们解决此问题的方法只是在本地计算机上重新导入密钥并选中“将此密钥标记为可导出”复选框。

于 2015-10-21T14:07:59.097 回答