加密web.config文件的elmah部分

时间:2010-12-03 06:15:32

标签: encryption web-config elmah

如何加密web.config文件的elmah部分,以便SMTP服务器&登录信息受到保护吗?

我已经学会了如何加密连接字符串,appSettings和其他部分;使用代码或aspnet_regiis.exe。

但是,当我尝试加密该部分时,它会告诉我找不到该部分。

有加密技巧吗?

谢谢, + M

2 个答案:

答案 0 :(得分:1)

以上信息是正确的(您需要定位elmah组的“errorMail”或特定子部分)。但是,解决方案的代码多于所需的代码......

这是一个使用“elmah / errorMail”的清洁解决方案。解决方案:

string section = "elmah/errorMail";

Configuration config = WebConfigurationManager.OpenWebConfiguration(HttpRuntime.AppDomainAppVirtualPath);
// Let's work with the section 
ConfigurationSection configsection = config.GetSection(section);
if (configsection != null)
    // Only encrypt the section if it is not already protected
    if (!configsection.SectionInformation.IsProtected)
    {
        // Encrypt the <connectionStrings> section using the 
        // DataProtectionConfigurationProvider provider
        configsection.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
        config.Save();
    }

答案 1 :(得分:0)

我尝试使用aspnet_regiis但是在指定节路径时遇到了问题。切换到基于代码的方法,我列举了部分&amp;据悉有SectionGroups,只有Sections可以加密,而Elmah是一个SectionGroup,所以我需要加密elmah SectionGroup下的errorMail部分。我比昨天知道的多一点。

这是片段,如果它对下线的其他人有用,来自global.asax.cs:

    private static void ToggleWebEncrypt(bool Encrypt)
    {
        // Open the Web.config file.
        Configuration config = WebConfigurationManager.OpenWebConfiguration("~");

        //.... (protect connection strings, etc)

        ConfigurationSectionGroup gpElmah = config.GetSectionGroup("elmah");
        if (gpElmah != null)
        {
            ConfigurationSection csElmah = gpElmah.Sections.Get("errorMail");
            ProtectSection(encrypted, csElmah);
        }

        //.... other stuff
        config.Save();

    }


    private static void ProtectSection(bool encrypted, ConfigurationSection sec)
    {
        if (sec == null)
            return;
        if (sec.SectionInformation.IsProtected && !encrypted)
            sec.SectionInformation.UnprotectSection();
        if (!sec.SectionInformation.IsProtected && encrypted)
            sec.SectionInformation.ProtectSection("CustomProvider");
    }