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

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

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

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

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

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

【问题讨论】:

    标签: .net encryption distributed app-config


    【解决方案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 的工作。

      【讨论】:

      • 在什么情况下?使用它们对用户进行身份验证以编辑配置?还是别的什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2015-05-01
      • 2020-01-30
      • 1970-01-01
      • 2021-07-22
      • 2013-06-30
      相关资源
      最近更新 更多