我有一个ASP.NET MVC 4项目,该项目将被部署到Azure的生产,在生产中我使用SQL Azure数据库。 我的问题是,我想只有在生产部署连接到SQL Azure数据库,而不是开发时, 并且 SQL Azure的连接字符串应该被加密。
现在,我可以解决通过Web.config中的第一个要求变换,从而使数据库连接字符串能够顺利通过部署取代天青。 不过,我看不出这与连接字符串加密结合起来? 如何才能部署当一个既加密SQL Azure的连接字符串,并用它替换的发展连接字符串? 对于这种情况下的最佳实践将是最欢迎的。
我认为这里一个很好的解决方案是键入生产<connectionStrings>
部分插入的Web.config和对其进行加密,然后将加密的<connectionStrings>
部到转换文件(例如Web.Release.config)和注释,以便它替换整个<connectionStrings>
在变换部。 这实现了与同样生产加密连接字符串Web.config文件部署的目标。
我一直遵循“保护您的连接字符串中的Windows Azure”的指导,部分1 , 2 , 3和4 ,以了解如何Web.config中进行加密。 我认为,一个完整的参考,别人这样做。 我将概述解决我的方案,我进行的主要步骤。
更新后<connectionStrings>
Web.config中生产设置部分,我安装PKCS12受保护配置提供并ASPNET_REGIIS.EXE跑到加密部分(在Visual Studio命令提示,位于在项目目录):
aspnet_regiis -pef "connectionStrings" "." -prov "CustomProvider"
我还添加了一个定义CustomProvider
到Web.config中:
<configProtectedData>
<providers>
<add name="CustomProvider" thumbprint="<your thumbprint here>"
type="Pkcs12ProtectedConfigurationProvider.Pkcs12ProtectedConfigurationProvider, PKCS12ProtectedConfigurationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=34da007ac91f901d"/>
</providers>
</configProtectedData>
然后我提出的加密<connectionStrings>
截面分成Web.Release.config(其用于在部署时天青变换Web.config)和注释的部分以替换相应的部分Web.config中:
connectionStrings configProtectionProvider="CustomProvider" xdt:Transform="Replace">
...
</connectionStrings>
最后,我恢复了发展<connectionStrings>
中的Web.config部分。 我已经测试该溶液,发现部署的Web.config包含加密<connectionStrings>
部分,正如我之后。
你会加密web.config文件中的部分。
请参阅MSDN有关如何将你的web.config文件的部分进行加密。
http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx
我会安装在你的情况是运行该命令行选项,有条件地只对特定构建配置的后生成事件。
例如:
if $(ConfigurationName) == Release_Production {path-to-.net-framework}\aspnet_regiis\Aspnet_regiis.exe {your options here}
请记住,后生成的事件只是简单的DOS命令。 您甚至可以使用()来范围若干命令。 如果将仅适用于该1号线,除非你它的范围。 标准的命令行限制。 评论回到这里,如果你有问题,设置它,但乌拉圭回合后命令行。
文章来源: ASP.NET MVC 4 - How should I encrypt the connection string to my production SQL server?