【问题标题】:Encrypt Connection String in Web.Config Fails在 Web.Config 中加密连接字符串失败
【发布时间】:2011-04-28 20:45:13
【问题描述】:

我想加密我的 web.config 的连接字符串。 Here 我找到了一个很好的例子来说明如何做到这一点。我实现了这一点,并在我的开发机器上运行它。 但是,如果我将其上传到提供程序,它不会出现以下错误:

[安全异常:请求失败。] System.Configuration.DpapiProtectedConfigurationProvider.Encrypt(XmlNode 节点)

我在this 博客中读到,这是因为网络可能在中等信任下运行,因此无法使用WebConfigurationManager.OpenWebConfiguration。而不是这个,应该使用WebConfigurationManager.GetSection。但是,如果我得到建议的部分,则对 ProtectSection 的调用将失败并显示以下错误消息:

System.InvalidOperationException:此操作不适用于运行时

谁能引导我找到解决方案,我如何编码(和解码)web.config 文件中的连接字符串(在运行时)?

更新
不是这个问题的真正答案,但主机完全信任网络,现在一切正常。我让这个问题保持开放,也许有人发布了原始问题的解决方案,并帮助这个人遇到了同样的问题但没有得到完全的信任。

【问题讨论】:

    标签: asp.net iis-7 web-config


    【解决方案1】:

    来自http://msdn.microsoft.com/en-us/library/89211k9b%28v=vs.80%29.aspx

    static void ToggleWebEncrypt()
    {
        // Open the Web.config file.
        Configuration config = WebConfigurationManager.
            OpenWebConfiguration("~");
    
        // Get the connectionStrings section.
        ConnectionStringsSection section =
            config.GetSection("connectionStrings")
            as ConnectionStringsSection;
    
        // Toggle encryption.
        if (section.SectionInformation.IsProtected)
        {
            section.SectionInformation.UnprotectSection();
        }
        else
        {
            section.SectionInformation.ProtectSection(
                "DataProtectionConfigurationProvider");
        }
    
        // Save changes to the Web.config file.
        config.Save();
    }
    

    更新

    另外,请确保您的服务帐户对 Web.config 具有写入权限。此外,请注意,在 Web.config 上授予服务帐户写入权限会在一定程度上增加应用程序的安全足迹。只有在您了解并接受风险的情况下才这样做。

    【讨论】:

    • 感谢您的回答。然而是行 Configuration config = WebConfigurationManager.OpenWebConfiguration("~");异常的来源,IIS不执行它并抛出SecurityException!
    • @HCL:您的服务帐户是否对 web.config 文件具有写入权限?
    • @kbrimington:是的,hoster 的配置工具允许我授予对目录库的权限,并且我在 root(也是虚拟目录)上授予了 testwise IUSR 读/写权限。跨度>
    • @kbrimington:看起来真的像Shahed Khan在他的帖子中写的那样,错误描述如下:应用程序试图执行安全策略不允许的操作。要授予此应用所需的权限,请联系您的系统管理员或在配置文件中更改应用的信任级别
    • @HCL:我对它仍然无法正常工作是否正确?如果是这样,请注意,除非您使用模拟,否则授予 IUSR 权限并不能解决问题。需要写入权限的是 service 帐户,而不是 user 帐户。如果您还不知道,可以使用Environment.UserName 找出帐户名称。
    猜你喜欢
    • 2010-12-14
    • 2012-06-18
    • 2011-06-21
    • 1970-01-01
    • 2012-05-31
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多