Web.Config文件加密后发布不起作用

时间:2015-01-08 06:35:19

标签: c# asp.net encryption configuration web-config

我使用以下代码

加密web.config文件
protected void Page_Load(object sender, EventArgs e)
{
    EncriptSection("connectionStrings", "DataProtectionConfigurationProvider");
}
private void EncriptSection(string sectionName, string provider)
{
    Configuration config =
         WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    ConfigurationSection section = config.GetSection(sectionName);
    if (section != null && !section.SectionInformation.IsProtected)
    {
        section.SectionInformation.ProtectSection(provider);
        config.Save();
    }
}

在加密web.config文件之后,Site在本地系统中运行良好,但是当我发布我的站点并部署到服务器时。

页面没有读取web.config文件并给出错误。当我解密文件然后将网站发布到服务器站点时,服务器上运行正常。

如何加密文件并将其运行到服务器中。

Below is the error which i am getting now :

运行时错误

描述:服务器上发生了应用程序错误。此应用程序的当前自定义错误设置可防止远程查看应用程序错误的详细信息(出于安全原因)。但是,它可以由运行在本地服务器计算机上的浏览器查看。

详细信息:要在远程计算机上查看此特定错误消息的详细信息,请在位于当前Web应用程序根目录中的<customErrors>配置文件中创建web.config标记。然后,此<customErrors>代码应将mode属性设置为Off

<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

注意:通过修改应用程序的defaultRedirect配置标记的<customErrors>属性以指向自定义错误页面URL,可以将自动查看的当前错误页面替换为自定义错误页面。 p>

<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
    </system.web>
</configuration>

****我投入之后**

<customErrors mode="Off"/> 

**在配置中然后得到以下错误****

  

分析程序错误消息:无法使用提供程序解密   'DataProtectionConfigurationProvider'。来自的错误消息   provider:密钥无法在指定状态下使用。 (例外   HRESULT:0x8009000B)

来源错误:

Line 13:  </system.web>
Line 14:   <connectionStrings  
                 configProtectionProvider="DataProtectionConfigurationProvider">
Line 15:     <EncryptedData>
Line 16:     <CipherData>
Line 17:    <CipherValue>reertertertreterterterterterterterte
              rtertertertertert5345345345 </CipherValue>

源文件:C:\ FOLDER \ web.config行:15

1 个答案:

答案 0 :(得分:4)

您需要使用解密的web.config部分发布应用程序,因为用于加密/解密的密钥是特定于机器的。

要在线加密web.config部分,请调用ProtectSection() Application_Start()中的global.asax方法。

所以ProtectSection()方法会在应用程序第一次启动时执行此操作。