在此工作中,我们正在开发ASP.NET MVC应用程序以进行概念验证。应用程序执行的某些操作需要传输凭证,因此我们将这些凭证存储在web.config的加密部分中。我们遇到的困难是,当一个开发人员加密数据并提交时,下一个开发人员更新他的本地副本并尝试使用该web.config,因为他们的计算机无法解密配置以供使用,所以会收到异常。在开发人员之间共享加密的web.config
我们应该如何处理?
在此工作中,我们正在开发ASP.NET MVC应用程序以进行概念验证。应用程序执行的某些操作需要传输凭证,因此我们将这些凭证存储在web.config的加密部分中。我们遇到的困难是,当一个开发人员加密数据并提交时,下一个开发人员更新他的本地副本并尝试使用该web.config,因为他们的计算机无法解密配置以供使用,所以会收到异常。在开发人员之间共享加密的web.config
我们应该如何处理?
过去,我使用machine.config作为敏感凭据,即连接字符串等。它位于C:\ Windows \ Microsoft.Net \ Framework \ V4.0.30319 \ Config
这将允许您完全省略提交凭据。只要确保每个开发人员和/或服务器都有自己的machine.config和所需的凭证设置。
由于machine.config是一个全局文件,在某些环境中可能有不良副作用。 –
可以理解的命名空间键也有帮助,例如company.projectname.db_connection –
我假设您使用aspnet_regiis.exe加密该部分。如果出现这种情况,您遇到问题的原因是机器上用于加密/解密的密钥不同。
您可以在所有计算机上使用相同的密钥,从配置角度来看,这与服务器场设置类似,因此您可以使用此SO question中的信息。
或者,由于存在开发人员有权访问凭据的内在假设,请将其解密,直到应用程序部署到生产服务器并对该部分进行加密。当在web.config中将用户名/密码指定为数据库连接的连接字符串的一部分时,这是一种常见解决方案,连接将被更新以反映生产数据库服务器作为加密之前的部署过程的一部分。
我认为最有意义的是,使用普通的webconfig进行开发,然后对部署进行加密。 –
我想有一种方法可以将加密部分从另一个文件中分离出来,并将其包含到主web.config中。我不确定如何做到这一点,但是这将允许您将主要web.config与其更改一起传递,并仅对本地需要的部分进行加密。 – ekolis
不要存储或检索webconfig,或者如果内容定期更改,请在检索后加密。我想你可以从源代码控制中检查出来后触发一个应用程序。只是作为提示,因为我不是关于webconfig的专家。 –