2010-04-21 110 views
0

我创建了一个控制台.Net应用程序,并使用RSAProtectedConfigurationProvider加密了app.config文件。我使用了一篇文章http://www.codeproject.com/KB/dotnet/EncryptingTheAppConfig.aspx作为加密的例子。它可以在我的XP桌面上的IDE中正常工作。 然后我将我的应用程序部署到Windows 2003服务器。该软件包包含应用程序的可执行文件以及加密的app.exe.config文件。但是,应用程序无法在服务器上有以下异常:部署加密的app.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

我在文章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),并且一切正常。

我希望我的文章有用。