安全、可移植的加密配置值——可能吗?

Posted

技术标签:

【中文标题】安全、可移植的加密配置值——可能吗?【英文标题】:Secure, portable encrypted config values -- possible? 【发布时间】:2010-10-08 12:10:13 【问题描述】:

我只是想知道是否有人对此有任何好主意。

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

How To: Configure MachineKey in ASP.NET 2.0

【讨论】:

不是ASP.NET,而是使用app.config的持久化服务怎么办? DPAPI 并非特定于 ASP.NET,因此您可以在 app.config 中覆盖您的 machineKey。相同的加密/解密代码将起作用。【参考方案2】:

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

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

<value>:secret_password</value>

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

在什么情况下?使用它们对用户进行身份验证以编辑配置?还是别的什么?

以上是关于安全、可移植的加密配置值——可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

`x!=x` 是测试 NaN 的可移植方法吗?

可移植地在 autoconf/automake 中包含 GLib 标头

WChars、编码、标准和可移植性

如何在CMake中配置可移植并行版本?

使用 wmemset() 的代码的可移植性如何?

Linux更安全?大规模Windows勒索软件移植至 Linux