安全,可移植的加密配置值 - 可能吗?

时间:2009-02-19 03:07:28

标签: .net encryption distributed app-config

我很好奇是否有人对此有任何好主意。

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

选项1)您可以在每台服务器的machine.config中更新它,并将machineKey设置为相同。这对服务器有很大影响,例如依赖于machineKey的不相关应用程序。

选项2)您可以覆盖web.config中的<machineKey>以获得更窄的范围。

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

How To: Configure MachineKey in ASP.NET 2.0

答案 1 :(得分:0)

我可以对您问题的至少一个方面发表评论,因为我们在工作时以这种方式配置了服务。

编辑/创建配置时,我们将一个特殊标记作为第一个字符:

<value>:secret_password</value>

冒号是特殊标记。当服务启动并读取配置时,它会通过查找令牌,加密它们,然后使用加密值覆盖纯文本来查找所有未加密的值。

因此,这允许编辑文件,同时保密秘密。

答案 2 :(得分:0)

这听起来像是X509 certificate的工作。