2008-09-03 158 views
2

我遇到了以前遇到的問題;找不到我如何解決它的參考。App.config連接字符串保護錯誤

這是問題。我們加密在App.config的連接字符串部分爲我們下面的使用客戶端應用程序代碼:

 config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) 
     If config.ConnectionStrings.SectionInformation.IsProtected = False Then 
      config.ConnectionStrings.SectionInformation.ProtectSection(Nothing) 

      ' We must save the changes to the configuration file.' 
      config.Save(ConfigurationSaveMode.Modified, True) 
     End If 

的問題是,我們有推銷員離開。舊筆記本電腦正在去新的銷售人員,並在新用戶的登錄下,當它試圖做到這一點,我們得到一個錯誤。錯誤是:

Unhandled Exception: System.Configuration.ConfigurationErrorsException: 
An error occurred executing the configuration section handler for connectionStrings. ---> System.Configuration.ConfigurationErrorsException: Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'. 
Error message from the provider: Object already exists. 
---> System.Security.Cryptography.CryptographicException: Object already exists 
+2

如果您使用的是Vista或更高版本,請確保您以管理員身份運行。 – 2010-09-22 12:48:13

回答

1

我在自己的原始答案中找到了一個更優雅的解決方案。我發現,如果我只登錄爲日誰orignally安裝該應用程序EUSER並引起了配置文件的ConnectionStrings進行加密,並去到.NET Framework目錄中commadn提示和運行

aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}" 

它給其他用戶訪問RSA加密密鑰容器的權限,然後它適用於其他用戶。

只是想在這裏補充它,因爲我認爲我已經在博客中對我們的開發博客這個問題,但在這裏找到,所以在情況下,我需要看看它再次就在這裏。在這個主題中也會添加到我們開發者博客的鏈接。

+0

這也有助於從ASP .NET應用程序中獲取該錯誤。 aspnet_Regiis -pa「NetFrameworkConfigurationKey ASPNET 謝謝 – Jay 2009-07-08 14:52:43

0

聽起來像一個權限問題。有問題的(新)用戶對app.config文件有寫入權限?以前的用戶是否可以掩蓋此問題的本地管理員或超級用戶?

+0

我們使用clickonce install安裝了新用戶的應用程序。這兩個用戶都在PC上的管理員組中。從我在網上發現的情況來看,它似乎是默認的RSA密鑰是特定於計算機的事實,當不同的用戶使用它來保護他們的app.config版本時,它會導致錯誤。我想我需要使用一些用戶特定的密鑰來保護,現在只需要知道如何。 :) 感謝回覆! Mike – MikeScott8 2008-09-03 17:58:37

1

所以我確實得到它的工作。

  1. 去除老用戶的筆記本電腦佔
  2. 復位app.config中有部分沒有從所有用戶機鍵
  3. 跑的應用程序保護
  4. 刪除密鑰文件,並允許它保護部分

但所有這一切都讓它爲這個用戶工作。

現在我需要知道我必須做的改變代碼,以保護部分,因此在PC上多個用戶可以使用該應用程序。我來這裏的虛擬PC(在明天到下週三休假到WDW後)!

任何建議,以幫助指引我在正確的方向,因爲我不是很有經驗的這種RSA加密類型的東西。

1

http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603

複製和粘貼:d

週一,2007年2月12日上午12:15由耐擦洗

回覆:使用加密的配置文件保護配置

這裏我所做的所有步驟的列表,以加密我的PC上的兩個部分,然後將其部署到WebServer。也許它會幫助別人...:

  1. 創建計算機級別的RSA密鑰容器

    aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp 
    
  2. 前connectionStrings節這web.config中加入:

    <add name="DataProtectionConfigurationProvider" 
    
         type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, 
    
           Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, 
    
           processorArchitecture=MSIL" 
    
         keyContainerName="DataProtectionConfigurationProviderKeys" 
    
         useMachineContainer="true" /> 
    

    不要從上面錯過<clear />!重要與encripting播放/ decripting多次

  3. 檢查在Web.config文件的頂部有這種時候。如果缺少添加:

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
    
  4. 保存並在VS密切Web.Config文件(!非常重要)

  5. 在命令提示符(本地PC)窗口去:

    C:\ WINNT \ Microsoft.NET \框架\ V2.0.50727

  6. 加密:(注意更改物理性路徑的應用程序,或使用-app選項給應用程序的名稱虛擬目錄!因爲我在PC上使用了VS,所以我最好選擇下面的選項。的路徑是路徑Web.config文件)

    ASPNET_REGIIS -pef 「的ConnectionStrings」 「C:\布拉\布拉\布拉」 -prov 「DataProtectionConfigurationProvider」

    ASPNET_REGIIS -pef 「的System.Web /成員」 「C:\布拉\布拉\布拉」 -prov 「DataProtectionConfigurationProvider」

  7. 解密(如果只需要!)(!如果只需要)

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla" 
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla" 
    
  8. Delete鍵集裝箱

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys" 
    
  9. 保存上述關鍵XML文件中以便將其從本地PC導出到Web服務器(UAT或生產)

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri 
    
  10. 導入密鑰容器WebServer的服務器上:

    aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml 
    
  11. 授予訪問鍵在Web服務器上

    aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User" 
    

    請參閱IIS中的ASP。(僅在必要!)

    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name 
    
  12. 刪除授權訪問Web服務器上的關鍵

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User" 
    
  13. 複製並粘貼到web服務器加密的Web.config文件:NET用戶或使用。