Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在开发人员之间共享加密的web.config_Asp.net_.net_Encryption - Fatal编程技术网

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

Asp.net 在开发人员之间共享加密的web.config,asp.net,.net,encryption,Asp.net,.net,Encryption,在这项工作中,我们正在开发一个ASP.NETMVC应用程序,以进行概念验证。应用程序执行的某些操作需要传输凭据,因此我们将这些凭据存储在web.config的加密部分。我们遇到的困难是,当一个开发人员加密数据并提交数据时,下一个更新其本地副本并尝试使用该web.config的开发人员会遇到异常,因为他们的计算机无法解密该配置以供使用 我们应该如何处理这个问题?在过去,我使用machine.config作为敏感凭据,例如连接字符串等。它位于C:\Windows\Microsoft.Net\Fram

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


我们应该如何处理这个问题?

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


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

我假设您正在使用它来加密该部分。如果是这种情况,则出现问题的原因是计算机上用于加密/解密的密钥不同

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


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

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

无论如何,如果你把整个交付生命周期作为这个问题的背景,我会做些什么来实现你试图保护的关键机密:

  • 不要存储团队不需要在本地运行的任何东西,即使是加密的密钥,除了dev或本地环境
  • 在web.config中具有本地或远程密钥
  • 在版本转换中,清除所有密钥机密以防意外使用到环境中
  • 使用发布时间变量替换在任何部署工具上都是非常常见的选择,例如Azure/TFS DevOps部署通过许多不同的方式支持它-部署定义级别、阶段级别、库变量或甚至更好的密钥值存储,并使用软件+硬件加密选项

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

    我认为有一种方法可以将加密部分分离到另一个文件中,并将其包含到主web.config中。我不知道具体怎么做,但这将允许您传递主web.config及其更改,并在本地加密您需要的部分。不要存储或检索网络配置,或者如果内容定期更改,请在检索后加密。我认为您可以在从源代码管理中签出应用程序后触发该应用程序。只是暗示一下,我不是webconfig方面的专家。因为machine.config是一个全局文件,在某些环境中可能会产生不良的副作用。可以理解,命名空间密钥也有帮助,例如company.projectname.db_connection。我想这是最有意义的,使用普通webconfig进行开发,然后在部署时进行加密。