【问题标题】:Deployment of encrypted app.config部署加密的 app.config
【发布时间】:2011-02-10 16:33:12
【问题描述】:

我创建了一个控制台 .Net 应用程序并使用 RSAProtectedConfigurationProvider 加密了 app.config 文件。我使用了一篇文章http://www.codeproject.com/KB/dotnet/EncryptingTheAppConfig.aspx 作为加密的示例。它在我的 XP 桌面上的 IDE 中运行良好。 然后我将我的应用程序部署到 Windows 2003 服务器。该软件包包括应用程序的可执行文件以及加密的 app.exe.config 文件。但是,应用程序在服务器上失败,但出现以下异常:

未处理的异常:System.Configuration.ConfigurationErrorsException:无法使用提供程序“RsaProtectedConfigurationProvider”解密。来自提供者的错误消息:无法打开 RSA 密钥容器。

我决定在服务器上加密 app.config,所以我复制了 app.config 并对其进行了加密。 app.exe.config 看起来是加密的,我运行了应用程序。但是,它失败了:虽然它没有像以前那样引发 Rsa 异常,但它无法读取连接字符串。解密app.exe.config后,发现里面只包含下面的字符串

<connectionStrings>
  <clear />
  <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
        providerName="System.Data.SqlClient" />

尽管原始 app.config 包含一个特定于应用程序的连接字符串。 我认为为了解决我的问题,我应该将 RSA 密钥从我的桌面导出到服务器。你能告诉我该怎么做吗(它不是一个 Web 应用程序!)。 非常感谢您的建议。

【问题讨论】:

    标签: vb.net deployment app-config encryption


    【解决方案1】:

    我在文章APP.config encryption with RSA and Deployment中找到了解决方案。

    建议使用自定义键。它们是使用 aspnet_regiis 实用程序创建、导出和导入的。

    这是我的笔记:

    1. 如果在开发桌面和目标服务器上安装了 IIS,它可以正常工作。但是对于我的控制台应用程序 IIS 是不需要的, 并且它可能不存在于服务器上。本文的作者在这种情况下提供了一种解决方法。我发现了一点 复杂和使用aspnet_regiis,因为我的源机器和目标机器都安装了IIS。

    2. configProtectedData 部分添加到我的 app.config 文件后,Visual Studio 会创建警告:

      “keyContainerName”属性未声明。
      未声明“useMachineContainer”属性。
      'description' 属性未声明。

      根据 Darth Zar 的文章 Visual Studio throws warnings when sections of Web.Config are encrypted using RSA,可以忽略 Web.config 的警告。
      在我的情况下,我忽略了它们(对于 app.config),一切正常。

    希望我的帖子对你有用。

    【讨论】:

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