asp.net - 在具有用户存储的 Web 场环境中使用 DPAPI/ProtectedData

标签 asp.net encryption web-farm dpapi

我想知道是否有人在网络农场环境中成功地将 DPAPI 与用户存储一起使用?

因为我们的应用程序是最近从 1.1 转换为 2.0 ASP.NET 应用程序,所以我们使用了直接调用 CryptUnprotect 的自定义包装器。方法。但这应该与 ProtectedData 相同2.0 框架中可用的方法。

因为我们在网络农场环境中运行,所以我们不能保证进行加密的机器将是解密它的机器。 (也因为机器故障不应该破坏我们的加密数据)。

因此,我们拥有的是一个服务组件,它在我们每个 Web 框上的特定用户帐户下运行在服务中。根据建议,此用户设置为具有漫游配置文件。

我们遇到的问题是在一台机器上加密的信息无法在另一台机器上解密,这会因 win32 错误而失败:

'Key not valid for use in specified state'.



我怀疑这是因为我在多台机器上以用户身份运行加密服务时犯了一个错误,因此让用户同时登录多台机器。

如果这是问题,其他人如何在 Web 场环境中将 DPAPI 与用户存储一起使用?

最佳答案

在 Web 场环境中,不是使用 DPAPI 直接加密/解密您的数据,而是使用它来加密 key 稍后用于解密 protected 数据。

作为部署过程的一部分,您可以将 key “安装”到每台服务器上。安装脚本需要在 AppPool 的身份下运行,并且可以将加密的 key 存储在 app.config 文件或注册表中。

加密数据本身可以存储在中央存储库/数据库中,以便场中的所有服务器都可以访问它。为了解密数据,Web 应用程序将从安装位置检索加密 key ,使用 DPAPI 对其进行解密,然后使用结果解密来自中央存储库的数据。

缺点是在初始安装过程中,明文 key 可能会在本地磁盘上存在一小段时间,在那里它可能会暴露给操作人员。如果担心的话,您可以添加额外的加密层,例如使用 web.config machineKey。

关于asp.net - 在具有用户存储的 Web 场环境中使用 DPAPI/ProtectedData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/201863/

相关文章:

asp.net - MVC : How to factor Repository Interfaces based on multi-level object model

c# - 在单声道中加密 web.config 的配置部分

SharePoint In 2 Locations - 有什么方法可以让两者都快吗?

asp.net - 上载大文件

asp.net - 网络农场和网络花园有什么区别?

asp.net - 使用 Breezejs 捕获 SaveChanges() 上的外键异常

javascript - 在 javascript (ASP.NET) 中引用输入(类型=密码)

java - Android:使用 iv 和 key 使用 AES 256 位加密来加密字符串

适用于 Linux VM 的 Azure 磁盘加密

c# - 在通用处理程序中检查查询字符串和运行方法的循环