2010-04-21 106 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),並且一切正常。

我希望我的文章有用。