首页 文章

部署加密的app.config

提问于
浏览
0

我've created a console .Net application and encrypted the app.config file with RSAProtectedConfigurationProvider. I'使用了一篇文章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应用程序!) . 非常感谢你的建议 .

1 回答

  • 1

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

    建议使用自定义键 . 使用aspnet_regiis实用程序创建,导出和导入它们 .

    这是我的笔记:

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

    • 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)我忽略了它们,一切正常 .

    我希望我的帖子很有用 .

相关问题