【问题标题】:Share encrypted web.config between developers在开发人员之间共享加密的 web.config
【发布时间】:2019-07-06 12:14:58
【问题描述】:

在工作中,我们正在开发一个 ASP.NET MVC 应用程序以进行概念验证。应用程序执行的某些操作需要传输凭据,因此我们将这些凭据存储在 web.config 的加密部分中。我们遇到的困难是,当一个开发人员加密并提交数据时,下一个更新他的本地副本并尝试使用该 web.config 的开发人员会遇到异常,因为他们的机器无法解密配置以供使用。

我们应该如何处理?

【问题讨论】:

  • 我认为有一种方法可以将加密部分分离到另一个文件中并将其包含在主 web.config 中。我不知道具体怎么做,但是这样可以让你传递主 web.config 及其更改,并只加密你在本地需要的部分。
  • 不要存储或检索webconfig,或者如果内容经常变化,检索后加密。我认为您可以在从源代码管理中检查应用程序后触发该应用程序。仅作为提示,因为我不是有关 webconfig 的专家。

标签: asp.net .net encryption


【解决方案1】:

过去,我将 machine.config 用于敏感凭据,即连接字符串等。它位于 C:\Windows\Microsoft.Net\Framework\V4.0.30319\Config

这将允许您完全忽略提交中的凭据。只需确保每个开发人员和/或服务器都有自己的 machine.config 以及所需的凭据设置。

【讨论】:

  • 由于 machine.config 是一个全局文件,在某些环境中可能会产生不良的副作用。
  • 可理解的命名空间键也有帮助,即 company.projectname.db_connection
【解决方案2】:

我假设您正在使用aspnet_regiis.exe 来加密该部分。如果是这种情况,您遇到问题的原因是机器上用于加密/解密的密钥不同。

您可以在所有机器上使用相同的密钥,从配置角度来看,这类似于场设置,因此您可以使用此 SO question 中的信息。

或者,因为有一个固有的假设,即开发人员可以访问凭据,所以在应用程序部署到生产服务器然后加密该部分之前将其解密。当用户名/密码在 web.config 中指定为数据库连接的连接字符串的一部分时,这是一种常见的解决方案,连接将被更新以反映生产数据库服务器作为部署过程的一部分,就在加密之前。

【讨论】:

  • 我想这是最有意义的,使用纯 webconfig 进行开发,然后在部署时加密。
【解决方案3】:

首先不确定为什么在 DevOps 最佳实践中有其他更好的方法来处理密钥机密时选择此选项。这似乎是经典的方式。同样在调试期间,任何开发人员都可以查看实际值或在日志中吐出?

无论如何,如果您将整个交付生命周期作为此问题的上下文,我可能会在这里做些什么来实现您试图保护密钥的秘密:

  1. 不要存储任何团队不需要在本地运行的加密密钥(开发人员或本地环境除外)。
  2. 在 web.config 中具有本地或远程密钥机密
  3. 在发布转换中,清理所有不小心使用到环境的密钥机密
  4. 使用发布时间变量替换在任何部署工具上都很常见,例如 Azure/TFS DevOps 部署以多种不同方式支持它 - 部署定义级别、阶段级别、库变量,甚至更好的密钥值存储与软件+硬件加密选项

希望这至少对您的设计方法有所帮助。

【讨论】:

    猜你喜欢
    • 2021-04-26
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2018-06-03
    • 2012-02-23
    • 2012-11-24
    • 1970-01-01
    相关资源
    最近更新 更多