【问题标题】:ASP.NET MVC 4 - How should I encrypt the connection string to my production SQL server?ASP.NET MVC 4 - 我应该如何加密到我的生产 SQL 服务器的连接字符串?
【发布时间】:2012-08-12 11:53:17
【问题描述】:

我有一个 ASP.NET MVC 4 项目,该项目将部署到 Azure 进行生产,在生产中我使用 SQL Azure 数据库。我的问题是我只想在生产部署中连接到 SQL Azure 数据库,而不是在开发时,并且应该加密 SQL Azure 连接字符串。

现在,我可以通过 Web.config 转换解决第一个要求,以便在部署到 Azure 时替换数据库连接字符串。但是,我看不到如何将它与连接字符串加密结合起来?如何在部署时既加密 SQL Azure 连接字符串又用它代替开发连接字符串?这种情况下的最佳实践将是最受欢迎的:)

【问题讨论】:

  • 为什么投反对票?如果我的问题有什么特别的问题,我欢迎建设性的批评。

标签: asp.net-mvc deployment encryption asp.net-mvc-4 azure-sql-database


【解决方案1】:

我认为这里的一个很好的解决方案是将生产<connectionStrings> 部分输入Web.config 并对其进行加密,然后将加密的<connectionStrings> 部分移动到转换文件(例如Web.Release.config)并对其进行注释以便它在转换时替换整个 <connectionStrings> 部分。这实现了使用同样加密的生产连接字符串部署 Web.config 的目标。

我已按照“在 Windows Azure 中保护您的连接字符串”中的指南,部分 1234 了解如何加密 Web.config。我建议作为一个完整的参考,其他人也这样做。我将概述我为解决我的场景而执行的主要步骤。

使用生产设置更新 Web.config 中的 <connectionStrings> 部分后,我安装了 Pkcs12 Protected Configuration Provider 并运行 aspnet_regiis.exe 来加密该部分(在 Visual Studio 命令提示符中,位于项目目录中):

aspnet_regiis -pef "connectionStrings" "." -prov "CustomProvider"

我还在 Web.config 中添加了CustomProvider 的定义:

<configProtectedData>
  <providers>
    <add name="CustomProvider" thumbprint="<your thumbprint here>"
       type="Pkcs12ProtectedConfigurationProvider.Pkcs12ProtectedConfigurationProvider, PKCS12ProtectedConfigurationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=34da007ac91f901d"/>
  </providers>
</configProtectedData>

之后,我将加密的&lt;connectionStrings&gt; 部分移动到 Web.Release.config(用于在部署到 Azure 时转换 Web.config),并注释该部分以替换 Web.config 中的相应部分:

connectionStrings configProtectionProvider="CustomProvider" xdt:Transform="Replace">
...
</connectionStrings>

最后我在 Web.config 中恢复了开发&lt;connectionStrings&gt; 部分。我已经测试了这个解决方案,发现部署的 Web.config 包含加密的&lt;connectionStrings&gt; 部分,就像我之后一样。

【讨论】:

【解决方案2】:

您将加密 web.config 文件中的部分。

请参阅 MSDN,了解如何加密 web.config 文件的各个部分。

http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx

在您的情况下,我会设置一个运行该命令行选项的 POST 构建事件,有条件地仅针对该特定构建配置。

例如:

if $(ConfigurationName) == Release_Production {path-to-.net-framework}\aspnet_regiis\Aspnet_regiis.exe {your options here}

请记住,构建后事件只是简单的 DOS 命令。您甚至可以使用 () 来确定多个命令的范围。 if 仅适用于该 1 行,除非您确定它的范围。标准命令行限制。如果您在设置时遇到问题,请在此处评论,但请发布您的命令行。

【讨论】:

  • 是的,我知道如何加密 Web.config 中的 connectionStrings 部分,问题是我需要对其进行转换。如何在 Visual Studio (2012) 中设置这样的构建后事件?
  • 右键单击您的项目,然后转到“属性”。寻找构建事件。会有 Pre 和 Post 选项。
  • 其他,如果您尝试使用内置部署选项直接部署到 Azure,您可能会遇到问题。可能需要构建一个自定义包和部署脚本,该脚本将为构建事件 (msbuild) 构建您的解决方案,它将处理您的转换,然后加密,然后使用 power shell 打包您的天蓝色解决方案。内置的东西很简单,没有太多的回旋余地。它是可配置的,但有很多陷阱。更容易做到命令行。还可以查看 msdeploy 的任何更新,看看现在是否支持 Azure
  • 我在构建时收到此错误:'Aspnet_regiis.exe' is not recognized as an internal or external command, operable program or batch file.
  • 您必须设置它们的安装路径。 msdn 文章应该说明它在 c:\windows 下的位置。提示:使用 %windows% 和 %system32% 命令行参数来帮助避免硬编码确切路径
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多