2009-02-19 17 views
3

我只是好奇,如果任何人有任何伟大的想法。安全,可移植的加密配置值 - 可能吗?

我们有很多C#windows服务。每个应用程序都安装在多台机器上(根据应用程序的不同,可以从2-80开始)。

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

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

DPAPI能做到这一点吗?是否可以在所有目标上安装一组密钥以允许解密通用配置文件?在这种情况下如何编辑配置?您如何阻止其他用户以相同的方式查看加密配置?

回答

2

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

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

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

会话和加密视图状态验证也取决于<machineKey>,所以通过跨服务器拥有相同的密钥,会话和视图状态将是可读的。对于具有相同服务器和集中式会话存储的Web场来说,这可能是需要的,但这不在原始问题的范围之内。

How To: Configure MachineKey in ASP.NET 2.0

+0

当它不是ASP.NET,但使用app.config的持久服务时,我该怎么办? – Joe 2009-02-19 14:58:56

+0

DPAPI不​​是特定于ASP.NET的,因此您可以在app.config中覆盖machineKey。相同的加密/解密码将起作用。 – spoulson 2009-02-20 13:19:20

0

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

当编辑/创建配置,我们把一个特殊记号的第一个字符:

<value>:secret_password</value> 

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

所以这允许文件被编辑,同时保密秘密。