4

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

我们有很多 C# windows 服务。每个应用程序都安装在多台机器上(从 2 到 80 个,取决于应用程序。)

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

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

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

4

3 回答 3

2

DPAPI 加密将<machineKey>用作私钥。

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

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

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

如何:在 ASP.NET 2.0 中配置 MachineKey

于 2009-02-19T03:23:54.783 回答
0

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

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

<value>:secret_password</value>

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

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

于 2009-02-19T03:16:26.767 回答
0

这听起来像是X509 证书的工作。

于 2009-02-19T04:17:07.213 回答