我已经创建了一个控制台.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应用程序!)。 非常感谢你的建议。
答案 0 :(得分:1)
我在文章APP.config encryption with RSA and Deployment中找到了解决方案。
建议使用自定义键。使用aspnet_regiis实用程序创建,导出和导入它们。
以下是我的笔记:
如果在开发桌面和目标服务器上安装了IIS,则可以正常工作。但对于我的控制台应用程序,不需要IIS, 它可能不存在于服务器上。本文作者在这种情况下提供了一种解决方法。我发现了一点 复杂并使用了aspnet_regiis,因为IIS已在我的源计算机和目标计算机上安装。
将configProtectedData
部分添加到app.config文件后,Visual Studio会创建警告:
未声明'keyContainerName'属性 未声明'useMachineContainer'属性 “声明”属性未声明。
根据Darth Zar的文章Visual Studio throws warnings when sections of Web.Config are encrypted using RSA,Web.config可以忽略警告。
我在我的情况下忽略了它们(对于app.config),一切正常。
我希望我的帖子很有用。