加密web.config的自定义部分

时间:2010-08-17 16:47:49

标签: asp.net configuration web-config

我使用文章Creating a Flexible Configuration Section Handler在我的应用程序中创建灵活配置节处理程序。

我还看到了这篇题为Encrypting Custom Configuration Sections on the OdeToCode blog的文章,介绍了如何加密web.config文件的各个部分。

从第一篇文章开始,我们有了这个web.config代码。

<?xmlversion="1.0"encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionname="StyleSheetSettings_1"    
            type="FifteenSeconds.Core.BasicConfigurator"/>
    </configSections>
    <StyleSheetSettings_1>
        <StyleSheets>
            <Style SheetName="Page"Href="Styles/Page.css"Media="screen"/>
            <StyleSheetName="Custom"Href="Styles/Custom.css"Media="screen"/>
            <StyleSheetName="Print"Href="/Lib/Styles/Print.css"Media="print"/>
        </StyleSheets>      
    </StyleSheetSettings_1>
 </configuration>

我尝试使用以下代码使用以下命令行代码加密代码。

 aspnet_regiis.exe -pef  "StyleSheetSettings_1" C:\Test\

我收到以下错误

  

无法加载类型   FifteenSeconds.Core.BasicConfigurator”   从程序集'System.Web,   版本= 4.0.0.0,文化=中立,   公钥= b03f5f7f11d50a3a”。

任何帮助都将不胜感激。

6 个答案:

答案 0 :(得分:19)

以下是此问题的另一种解决方法(在http://www.dotnetnoob.com/2013/01/how-to-encrypt-custom-configuration.html处找到)。在运行aspnet_regiis命令之前,注释掉configSections元素(/ configuration / configSections)下自定义部分的section元素,并且自定义部分应该加密。

<configSections>
    <!--<section name="myCustomSection" type="My.Product.CustomSection, My.Product.Assembly/>-->
</configSections>


c:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis -pef myCustomSection C:\path\to\app
Microsoft (R) ASP.NET RegIIS version 4.0.30319.17929
Administration utility to install and uninstall ASP.NET on the local machine.
Copyright (C) Microsoft Corporation.  All rights reserved.
Encrypting configuration section...
Succeeded!

答案 1 :(得分:8)

唯一已知的解决方案是可怕的黑客攻击。将程序集(和所有依赖项)复制到相关的.NET框架目录(aspnet_regiis.exe所在的目录)。

答案 2 :(得分:0)

尝试更改类型以包含程序集名称

type="FifteenSeconds.Core.BasicConfigurator, MyWebApplication"

这假设BasicConfiguration在您的Web App中

答案 3 :(得分:0)

我在配置文件中引用类型时遇到了类似的问题。正如Conrad Frix建议的那样,您需要在命名空间类型引用之后引用程序集名称。我错误地将我认为的程序集名称放下来,而不是检查它可能与项目名称有不同的名称。您可以通过右键单击Visual Studio中的项目并转到属性来确保。仔细检查以确保项目正在输出与您在web.config中指定的名称相同的程序集。

答案 4 :(得分:0)

这样的事可能有用,我自己没有尝试过,而不是一个干净的解决方案

http://blogs.msdn.com/b/kaevans/archive/2004/08/19/217177.aspx 它使用System.Configuration.NameValueSectionHandler。

(System.Collections.Specialized.NameValueCollection) WebConfigurationManager.GetSection("SectionName")

我尝试过这种方式,使用System.Configuration.SingleTagSectionHandler和

(Hashtable)WebConfigurationManager.GetSection("SectionName");

http://vaultofthoughts.net/UsingSingleTagSectionHandlerInsteadOfAppSettings.aspx

答案 5 :(得分:0)

我刚刚很容易解决了类似的问题。您需要在&#34;类型&#34;中指定库。属性。

而不是:

<section name="StyleSheetSettings_1" type="FifteenSeconds.Core.BasicConfigurator"/>

尝试:

<section name="StyleSheetSettings_1" type="FifteenSeconds.Core.BasicConfigurator, FifteenSeconds"/>

我的问题几乎完全相同,尽管我使用的是.NET库。

此:

<section name="Roles" type="System.Configuration.AppSettingsSection" />

变成了:

<section name="Roles" type="System.Configuration.AppSettingsSection, System.Configuration" />

希望这有效。