加密app.config中的连接字符串

时间:2012-07-24 18:47:41

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

我无法在app.config中加密连接字符串。我的代码将保护app.config的connectionStrings部分,但密码仍然以纯文本显示。

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

6 个答案:

答案 0 :(得分:50)

您可以轻松应用与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
  4. 您可以在记事本中打开它以查看加密文件。在visual studio中,您将看到它已被解密。您可以像使用未加密的方式一样使用连接字符串。

答案 1 :(得分:22)

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

还可以查看Implementing Protected Configuration

答案 2 :(得分:3)

定义config文件

的位置
Configuration config  = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

如果您想加密connectionStrings

config.ConnectionStrings.SectionInformation.ProtectSection(Nothing);

您必须了解应用配置部分

所以,如果你想加密AppSettings

config.AppSettings.SectionInformation.ProtectSection(Nothing);

enter image description here

答案 3 :(得分:2)

•重命名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"

中添加它

赞:

enter image description here

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

答案 4 :(得分:0)

自动执行此操作的方法:

ProjectSettings>编译> BuildEvents>编辑后期生成

粘贴以下代码:

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进行加密。

答案 5 :(得分:0)

此外,如果要在网络场中加密和解密连接字符串的任何人,请按以下步骤操作:

  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. 将此文件复制到Web场中的第二台服务器
  10. 将其导入到该服务器中: aspnet_regiis -pi "MyKeys" "c:\keys.xml"
  11. 授予对此密钥的访问权限(与步骤2相同)
  12. 在第二台服务器上测试应用程序

来源:How to encrypt and decrypt connection strings