49

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

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

4

6 回答 6

61

您可以轻松地应用与 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 中,您会看到它已被解密。您可以像未加密一样使用连接字符串。(请注意,它只能在加密的同一台机器上解密。)

于 2015-03-21T00:11:31.283 回答
25

看看这篇文章它有一些非常有用的例子。您基本上是System.Configuration.SectionInformation.ProtectSection在这里寻求帮助。

还可以查看实施受保护的配置

于 2012-07-24T18:52:02.323 回答
4

• 重命名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.configApp.Config

于 2018-10-11T13:39:53.343 回答
3

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

  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. 在第二台服务器中测试应用程序

来源:如何加密和解密连接字符串

于 2019-07-26T20:23:12.077 回答
3

定义config文件的位置

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

如果你想加密 connectionStrings

config.ConnectionStrings.SectionInformation.ProtectSection(Nothing);

您必须了解应用程序配置部分

所以如果你想加密AppSettings

config.AppSettings.SectionInformation.ProtectSection(Nothing);

在此处输入图像描述

于 2016-12-11T05:30:16.747 回答
2

一种自动化的方法:

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。

于 2019-01-06T13:41:49.607 回答