【问题标题】:Encryption / Decryption of app.config sections using RsaProtectedConfigurationProvider使用 RsaProtectedConfigurationProvider 加密/解密 app.config 部分
【发布时间】:2010-11-23 13:40:32
【问题描述】:

在安装我们的程序期间,我们运行此方法来加密 app.config 的部分:

// Get the application configuration file.
Configuration config =
      ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// Define the Rsa provider name.
const string provider = "RsaProtectedConfigurationProvider";

// Get the section to protect.
ConfigurationSection connStrings = config.ConnectionStrings;

if (connStrings != null)
{
    if (!connStrings.SectionInformation.IsProtected)
    {
        if (!connStrings.ElementInformation.IsLocked)
        {
            // Protect the section.
            connStrings.SectionInformation.ProtectSection(provider);

            connStrings.SectionInformation.ForceSave = true;
            config.Save(ConfigurationSaveMode.Full);
        }
    }
}

到目前为止工作正常。但是如果我运行这个程序,我们会遇到几台机器出现以下错误“无法使用提供者'RsaProtectedConfigurationProvider'解密。来自提供者的错误消息:无法打开RSA密钥容器”。 p>

当然我搜索并找到了this help,但这不起作用。有什么想法吗?

【问题讨论】:

  • 故障机器上的操作系统是什么?也许它可能是 UAC+Elevation 问题。有关该机器的任何信息都会很好。
  • 也许是个不错的方向。目前已知的有 Vista、W7 和 Server 2008。

标签: c# configuration encryption rsa


【解决方案1】:

在将 UAC 设置为默认保护的 Win 7 上的 Visual Studio 2010 中进行调试时,我遇到了类似的问题。

为了解决这个问题,我必须以管理员身份运行 Visual Studio(“以管理员身份运行”)。

我在尝试运行 aspnet_regiis.exe 来加密我的 web.config 部分时遇到了同样的问题。如果我没有“以管理员身份”运行命令行/控制台,我会得到一个更加神秘的命令行错误:“对象已经存在。”

【讨论】:

    【解决方案2】:

    是的。

    原因是那些工作的机器在其 ma​​chine.config 中设置了RsaProtectedConfigurationProvider。那些不工作的,没有它 - 只需为那些机器手动添加它

    我想这是 aspnet_regiis.exe 所做的步骤之一。我无法想象你想在所有客户端机器上运行它。

    更新

    好的,我在你的问题中用粗体表示了错误的主要部分——你是对的,这是一个不同的问题。这是一个安全问题。如果您查看位置 C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeysC:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 根据操作系统,您会看到许多文件。您的进程确实有权访问该文件夹,因此只需授予文件访问整个文件夹的权限,以获取应用程序或特定文件的身份(时间戳会告诉您是否已创建它)。

    【讨论】:

    • 不。我在崩溃的机器上检查了它 - machine.config 包含 RsaProtectedConfigurationProvider。
    • 不可能,名称不完全相同。检查名称并确保其名称相同。
    • 检查了两次 - 绝对是相同的部分,甚至内容都是一样的。
    【解决方案3】:

    我在一个设置为 SQL Server 的 Windows Server 上运行的 app.config 上得到了这个。它没有安装 IIS。 machine.config 文件将 RSAProtectedConfigurationProvider 列为默认设置,但是当我们查看上面 Aliostad 提到的两个文件夹时,这些文件夹是空的。没有安装任何密钥。我们使用 aspnet_regiis 工具来创建自定义密钥。然后我们使用它来授予对运行批处理作业的身份的访问权限。所有这些都是以管理员身份运行 cmd.exe 和 aspnet_regiis。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 2012-03-13
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2014-12-05
      • 2011-02-10
      相关资源
      最近更新 更多