C# 在mono中加密web.config的配置部分

C# 在mono中加密web.config的配置部分,c#,.net,encryption,mono,C#,.net,Encryption,Mono,我看到可以使用ASP_regiis来加密web.config文件的部分,但我正在使用Apache在一个盒子上运行mono。在Mono/Linux中有这样做的方法吗?除非我弄错了,否则IIS不会提供Web.Config文件。如果您担心有人将其从web上删除,我相信您可以阻止Apache提供此文件 如果你说的是当地的安全问题,我认为没有一个“好”的方法来做到这一点。假设您的Web.Config中有密码,正确加密该文件的唯一方法是需要另一个密码来解密该文件。因此,本质上,由于(我假设)您需要以编程方式

我看到可以使用ASP_regiis来加密web.config文件的部分,但我正在使用Apache在一个盒子上运行mono。在Mono/Linux中有这样做的方法吗?

除非我弄错了,否则IIS不会提供Web.Config文件。如果您担心有人将其从web上删除,我相信您可以阻止Apache提供此文件

如果你说的是当地的安全问题,我认为没有一个“好”的方法来做到这一点。假设您的Web.Config中有密码,正确加密该文件的唯一方法是需要另一个密码来解密该文件。因此,本质上,由于(我假设)您需要以编程方式访问该文件,您只需移动存储密码的位置,从Web.Config到源代码或另一个外部文件,这实际上不会给您带来任何好处。所有其他不需要密码来解密的加密方法都只是隐藏文件,但很容易被取消隐藏

阅读这篇关于Pidgin(前身为gaim)在本地存储密码的文章。此外,维基百科关于加密密钥的文章可能会很有用。两者都讨论了该方法的固有局限性


基本上,如果您在本地锁定文件,请使用基于用户帐户的安全性来执行此操作,即限制对文件的读/写访问。

您可以通过编程方式使用System.Configuration.ConfigurationManager获取ConfigurationSection对象并调用SectionInformation.ProtectionSection(“DataProtectionConfigurationProvider”)在上面

//
///从给定的配置对象加密配置节
/// 
///要加密的节的路径
///配置
公共静态无效EncryptConfigSection(字符串sectionKey,配置配置)
{
ConfigurationSection=config.GetSection(sectionKey);
if(节!=null)
{
如果(!section.SectionInformation.IsProtected)
{
如果(!section.ElementInformation.IsLocked)
{
section.SectionInformation.ProtectSection(“DataProtectionConfigurationProvider”);
section.SectionInformation.ForceSave=true;
config.Save(ConfigurationSaveMode.Full);
}
}
}
}
对于Web配置,您需要使用System.Web.Configuration.WebConfigurationManager获取配置对象,然后将其传递给上述函数。请注意,对于web.config文件,只有某些部分是可加密的

还要注意的是,如果设置存储在AppSettings中,那么任何人都可以编写一个简单的应用程序,当在服务器上运行时,只要他们知道您的设置名称,就可以检索设置的纯文本值


查看Jon Galloway关于简单加密AppSettings部分的替代方案的以下文章:

我希望加密机密数据,而不是在配置文件中使用明文。对,但我想说的是,除非每次应用程序运行时都必须手动输入密码,否则您并没有真正加密它。我并不是为web用户加密它,我不希望盒子上的人看到/操作我在文件中的数据。我想我没有很好地传达我的观点。我编辑了我的问题并添加了更多链接,希望能帮助您了解我所说的基于密钥的加密。来自@alexandre domingos的评论:我想补充的是,在发表此评论时,
DataProtectionConfigurationProvider
,Mono不支持,您应该在
protectedsection
方法中使用
rsaptectedconfigurationprovider
    /// <summary>
    /// Encrypts a Config section from the given Configuration object
    /// </summary>
    /// <param name="sectionKey">Path to the section to Encrypt</param>
    /// <param name="config">Configuration</param>
    public static void EncryptConfigSection(String sectionKey, Configuration config)
    {
        ConfigurationSection section = config.GetSection(sectionKey);
        if (section != null)
        {
            if (!section.SectionInformation.IsProtected)
            {
                if (!section.ElementInformation.IsLocked)
                {
                    section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
                    section.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Full);
                }
            }
        }
    }