Web.config中包含的部分可以加密

时间:2015-05-18 11:34:18

标签: asp.net

我正在开发一个ASP.NET MVC5网站,我很快就需要将其部署到IIS8网络服务器。我试图正确获取web.config文件的安全模型,特别是我想:

  • 防止在我的源代码管理系统中公开的web.config文件中的机密
  • 保护已部署的web.config不被窥探(我不拥有服务器)。

通过搜索SO和其他网站,我可以看到有针对每种方案的特定工具/技术:

  • '包括' web.config中未保存到SCCS的部分。
  • 加密的web.config文件。或者加密的文件部分更加精确。

我对这两者都很好,但我不能为我的生活看到如何结合这两种技术同时解决这两个问题。是否可以加密外部部分?这是否是正确的方法,因为许多答案现在已有几年的历史了,并且解决了旧版本的ASP.NET / MVC问题。

我不能成为第一个想要这样做的人,所以我确定我错过了一些明显的东西。

有人建议这可能已经回答here,但是问题是加密主web.config文件中的部分,我问的是加密外部部分。我指的是包括在内的部分'使用configSource XML属性。

1 个答案:

答案 0 :(得分:2)

回答自己的问题可能是一种糟糕的形式,但我有一丝灵感,经过几个小时的实验,我按照自己的意愿工作。

我完全错误的是我试图加密外部文件。它不像那样工作。以下是它的工作原理,至少,它是如何在IIS8.5和ASP.NET v4.0.30319服务器上运行的。

的ConnectionStrings

  1. 在单独的文件中创建connectionStrings部分,例如Web.connectionStrings.config:

    <?xml version="1.0"?>
    <connectionStrings>
      <add name="MyConnection" connectionString="{your connection string here}" 
          providerName="System.Data.SqlClient" />
    </connectionStrings>
    
  2. 从web.config引用此文件:

    <connectionStrings configSource="Web.connectionStrings.config" />
    
  3. 确保外部文件不受源代码控制,因此不会上传到您的SCCS。

  4. 部署 BOTH 文件,作为部署过程的一部分,或者如果您真的偏执,请手动部署安全文件。

  5. 通常使用Afzaal提到的文章中提到的aspnet_regiis.exe命令加密web.config的connectionStrings部分。此过程实际上会加密Web.connectionStrings.config文件的内容,并保持web.config文件不变。您需要保留外部文件,但现在已加密,这是非常安全的。

  6. 的appSettings

    1. 在单独的文件中创建安全关键设置,例如Web.appSettings.config。

      <?xml version="1.0"?>
      <appSettings>
        <add key="wc1" value="web.app.config1" />
        <add key="wc2" value="web.app.config2" />
      </appSettings>
      
    2. 从web.config引用此文件:

        <appSettings file="Web.App.config">
          {other non-secure appSettings}
        </appSettings>
      
    3. 再次确保安全文件不受源代码管理,并将这两个文件部署到生产服务器。

    4. 加密web.config文件的appSettings部分。

    5. 与connectionStrings部分不同,它根本不会改变外部文件。而是合并web.config和外部文件中的设置(如果遇到重复键,则外部文件优先),并以加密形式存储在web.config中。

      此时,您可以删除Web.appSettings.config文件,因为其内容现已合并到主文件中。

      注意事项:

      • 如果稍后再引入另一个Web.appSettings.config文件,并重新启动该站点,该文件的内容将覆盖web.config中的加密设置。这可能有用也可能没用。删除文件并重新启动站点后,设置将再次恢复为加密文件。
      • 如果解密appSettings部分, ALL ,当前设置将写回主web.config文件,包括最初来自外部文件的文件。如果您只是更改设置然后重新加密文件,则需要记住删除它们。