我很好奇,如果有人对此有什么好主意。

我们有很多C#Windows服务。每个应用程序都安装在多台计算机上(2-80处的任何位置,具体取决于应用程序。)

由于网络的安全性设置,我们不能(一致地)对SQL服务器使用Windows身份验证,因此我们的连接字符串和凭据具有实际的用户名和密码。

我们的基础架构人员希望能够在部署软件时执行以下操作:
1)一次编辑配置-为各种数据库连接设置适当的服务器,用户和密码。
2)至少对连接字符串进行加密或肉眼无法识别
3)将配置文件复制到特定软件的所有安装中。这意味着加密不能绑定到特定计算机。

DPAPI可以这样做吗?可以在所有目标上安装一组密钥以允许解密公共配置文件吗?在这种情况下,如何编辑配置?如何防止其他用户以相同方式查看加密的配置?

最佳答案

DPAPI加密使用<machineKey>作为私钥。

选项1)您可以在每个服务器的machine.config中对此进行更新,并将machineKey设置为相同。这会对服务器产生广泛影响,例如依赖于MachineKey的不相关应用程序。

选项2)您可以覆盖web.config中的<machineKey>以缩小范围。

会话和加密的视图状态验证也取决于<machineKey>,因此,通过在服务器之间使用相同的密钥,会话和视图状态将可以相互读取。对于具有相同服务器和集中式会话存储的Web场,这可能是理想的,但这超出了原始问题的范围。

How To: Configure MachineKey in ASP.NET 2.0

10-07 20:10