【问题标题】:Encrypt connection string in app.config加密 app.config 中的连接字符串
【发布时间】:2012-07-23 03:41:23
【问题描述】:

我在加密 app.config 中的连接字符串时遇到问题。我有保护 app.config 的 connectionStrings 部分的代码,但密码仍以纯文本形式显示。

我需要加密连接字符串,因此在部署时它不是纯文本。我在 SO for web.config 上看到了类似的问题,但不是 app.config。

【问题讨论】:

  • 请记住,如果您使用 ProtectSection() 并加密您的连接字符串,我只需复制您的加密 .config 文件,将其用于我的应用程序并调用 UnprotectSection()。这将以纯文本形式返回您的原始连接字符串。
  • @RunCMD,只要在同一台电脑上,就可以。根据微软文档,“连接字符串只能在它被加密的计算机上解密。”...参考:docs.microsoft.com/en-us/dotnet/framework/data/adonet/…

标签: c# sql-server-2008 app-config


【解决方案1】:

您可以轻松应用与 web.config 相同的解决方案,您只需将 app.config 重命名为 web.config,使用 aspnet_regiis 工具加密,然后将其重命名回 app.config。

  1. 将 app.config 重命名为 web.config
  2. 打开命令提示符并输入:
    %windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" c:\<folder containing your web.config> (停在文件夹级别,不要放结尾的“”)
  3. 将 web.config 重命名为 app.config

您可以在记事本中打开它以查看加密文件。在 Visual Studio 中,您会看到它已被解密。您可以像未加密一样使用连接字符串。 (请注意,它只能在加密的同一台机器上解密。)

【讨论】:

  • 完美!切中要害!并用于解密: %windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pdf "connectionStrings" c:\folder
  • 这对我有用,并且比公认的答案更容易实现。
  • 对我来说,我必须以管理员身份运行命令提示符才能使其正常工作。
  • 我使用该方法更改它被加密的字符串,但是在我的 VS 2012 中填充 app.config 文件后,它显示错误:“元素 ConnectionString 在命名空间 @ 中具有无效的子元素 EncryptedData 987654321@"。无奈!
  • 这仅适用于用于加密文件的同一台计算机;如果你部署到另一台电脑上就不行了,from microsoft note
【解决方案2】:

看看This Article 它有一些非常有用的例子。您基本上是在寻找System.Configuration.SectionInformation.ProtectSection 来帮助您。

也可以看看Implementing Protected Configuration

【讨论】:

  • 这种方法是否可用于其中的 DataSet 和 TableAdapters ?他们选择存储在您的 app.config 中的 ConnectingStrings .. 如果它已加密,它仍会自动解密吗??
  • 这基本上是一个仅链接的答案。如果链接断开,您是否介意将链接的要点添加到您的答案中以使答案有用?
【解决方案3】:

• 重命名App.config file to web.config<br> • 以管理员身份运行命令提示符:

用于加密:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" 引号内您的项目位置和-prov "DataProtectionConfigurationProvider"

例如:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "D:\location\location1\location" -prov "DataProtectionConfigurationProvider" 

用于解密:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" 引号内您的项目位置。

例如:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "D:\location1\location" 

对于错误:

在配置中添加这个xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"

像这样:

• 最后,将web.config 重命名为App.Config

【讨论】:

    【解决方案4】:

    定义config文件的位置

    Configuration config  = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    

    如果你想加密connectionStrings

    config.ConnectionStrings.SectionInformation.ProtectSection(Nothing);
    

    您必须了解应用配置部分

    所以如果你想加密AppSettings

    config.AppSettings.SectionInformation.ProtectSection(Nothing);
    

    【讨论】:

    • 这可行,但在我的情况下,我必须将“Nothing”替换为“DataProtectionConfigurationProvider”
    • @Salen-Ahmed 你忘了保存配置。 config.save()
    【解决方案5】:

    此外,如果有人想在网络农场中加密和解密连接字符串,请按照以下步骤操作:

    1. 创建一个 RSA 密钥: aspnet_regiis -pc "MyKeys" -exp

    2. 授予应用程序池标识访问此密钥的权限: aspnet_regiis -pa "MyKeys" "IIS AppPool\ApplicationPoolName" -full

    3. 将 RSA 提供程序添加到 web.config:

      <configuration>
          <configProtectedData>
              <providers>
                  <add name="MyProvider" 
                       type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" 
                       keyContainerName="MyKeys" 
                       useMachineContainer="true" />
              </providers>
          </configProtectedData>
      </configuration>
      
    4. 使用 RSA 提供程序加密 web.config: aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider" 注意:您可以使用另一种语法,就像我们为单个服务器场景所做的那样。例子: ASPNET_REGIIS -pef "connectionStrings" "D:\inetpub\wwwroot\applicationFolder" -prov "MyProvider"

    5. 打开 web.config 并确认连接字符串已加密

    6. 测试网站并确认它正在运行

    7. 尝试解密 web.config。使用下面的代码创建一个 test.aspx 文件。浏览它以查看解密文件

    8. 将 RSA 密钥导出到 C 盘: aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri

    9. 将此文件复制到网络场中的第二台服务器

    10. 将其导入该服务器: aspnet_regiis -pi "MyKeys" "c:\keys.xml"

    11. 授予对该密钥的访问权限(与第 2 步相同)

    12. 在第二台服务器上测试应用程序

    来源:How to encrypt and decrypt connection strings

    【讨论】:

      【解决方案6】:

      一种自动化的方法:

      ProjectSettings > Compile > BuildEvents > Edit Post-build

      粘贴以下代码:

      SET ApplicationName=YourAppWithoutExtention
      echo.
      echo POST BUILD ACTIONS
      echo ====================
      
      if EXIST web.config (
          echo Deleting web.config
          DEL web.config
      )
      
      echo Renaming %ApplicationName%.exe.config to web.config
      REN %ApplicationName%.exe.config web.config
      
      echo Running aspnet_regis against webconfig
      SET rpath=%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" "$(TargetDir)
      SET rpath=%rpath:~0,-1%"
      echo Path: %rpath%
      %rpath%
      
      echo Renaming web.config to %ApplicationName%.exe.config 
      REN web.config %ApplicationName%.exe.config
      
      echo Done.
      

      将“YourAppWithoutExtention”替换为您的应用名称。

      然后每次构建时,它都会自动加密你的 app.config。

      【讨论】:

      • 发布怎么样?
      猜你喜欢
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      相关资源
      最近更新 更多