在开发人员之间共享加密的web.config

时间:2012-08-27 13:28:23

标签: asp.net .net encryption

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

我们该如何处理?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

无论如何,如果您将整个交付生命周期作为解决此问题的背景,那么在这里我可能会做些什么来实现您试图保护密钥机密的事情:

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

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