我想知道是否有人在Web场环境中成功使用DPAPI和用户存储?
因为我们的应用程序是最近从1.1转换为2.0的ASP.NET应用程序,所以我们使用直接调用CryptUnprotect
方法的自定义包装器.但这应该ProtectedData
与2.0框架中可用的方法相同.
因为我们在Web场环境中运行,所以我们无法保证执行加密的计算机将是解密它的计算机.(也因为机器故障不应该破坏我们的加密数据).
所以我们拥有的是一个服务组件,它在我们每个Web框上的特定用户帐户下运行.根据推荐,此用户设置为具有漫游配置文件.
我们遇到的问题是在一台机器上加密的信息无法在另一台机器上解密,这会因win32错误而失败:
'密钥无法在指定状态下使用'.
我怀疑这是因为我在多台机器上将加密服务作为用户运行时犯了一个错误,因此保持用户同时登录多台计算机.
如果这是问题,那么在Web场环境中如何使用DPAPI和User Store?
在Web场环境中,您可以使用它来加密以后用于解密受保护数据的密钥,而不是使用DPAPI直接加密/解密数据.
作为部署过程的一部分,您可以将密钥"安装"到每个服务器上.安装脚本需要在AppPool的标识下运行,并且可以将加密的密钥存储在app.config文件或注册表中.
加密数据本身可以存储在中央存储库/数据库中,以便服务器场中的所有服务器都可以访问它.要解密数据,Web应用程序将从安装位置检索加密密钥,使用DPAPI对其进行解密,然后使用结果解密来自中央存储库的数据.
缺点是明文密钥可能在初始安装过程中短时间内存在于本地磁盘上,可能会暴露给操作人员.您可以添加额外的加密层,例如使用web.config machineKey,如果这是一个问题.