2

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

我们应该如何处理?

4

3 回答 3

1

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

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

于 2012-08-27T16:59:58.307 回答
1

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

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

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

于 2012-08-27T17:07:53.680 回答
0

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

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

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

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

于 2019-03-16T13:27:31.350 回答