2008-09-03 8 views
2

Ich stoße auf ein Problem, das ich zuvor hatte; kann meine Referenz nicht finden, wie man es löst.App.config Verbindungszeichenfolge Schutzfehler

Hier ist das Problem. Wir verschlüsseln den Verbindungszeichenabschnitt in der app.config für unseren Client-Anwendung unter Verwendung von Code unter:

 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 

Das Problem ist, dass wir einen Verkäufer verlassen hatten. Der alte Laptop geht zu einem neuen Verkäufer und unter dem Login des neuen Benutzers, wenn er dies versucht, erhalten wir einen Fehler. Der Fehler lautet:

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

Wenn Sie auf Vista oder höher sind, stellen Sie sicher, dass Sie als Administrator ausgeführt werden. –

Antwort

1

Ich fand eine elegantere Lösung, die in meiner ursprünglichen Antwort auf mich selbst. Ich fand, wenn ich nur als th Euser angemeldet, die orignally die Anwendung installiert und verursachte die Konfigurationsdatei connection verschlüsselt und an das .net Framework-Verzeichnis in einem commadn Prompt gehen werden und

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

es gab die anderen Benutzer ausführen Berechtigung, auf den RSA-Verschlüsselungsschlüssel-Container zuzugreifen, und er funktioniert dann für die anderen Benutzer.

Ich wollte es nur hier hinzufügen, da ich dachte, ich hätte dieses Thema auf unserem Dev-Blog gebloggt, aber hier gefunden, also falls ich es noch einmal nachschlagen muss, wird es hier sein. Wird bei diesem Thread auch einen Link zu unserem Entwickler-Blog-Punkt hinzufügen.

+0

Dies hilft auch, wenn Sie diesen Fehler von einer ASP.NET-Anwendung erhalten. aspnet_Regis -pa "NetFrameworkConfigurationKey ASPNET Danke – Jay

0

Klingt wie ein Berechtigungsproblem. Der (neue) Benutzer hat Schreibberechtigungen für die Datei app.config? War der vorherige Benutzer ein lokaler Administrator oder Hauptbenutzer, der dieses Problem maskiert haben könnte?

+0

wir hatten die App für neue Benutzer installiert, mit der Clickonce-Installation. Beide Benutzer waren in der Admin-Gruppe auf dem PC. Aus dem, was ich online gefunden habe, scheint die Tatsache zu sein, dass der Standard-RSA-Schlüssel maschinenspezifisch ist und wenn verschiedene Benutzer ihn verwenden, um ihre Version der app.config zu schützen, verursacht sie Fehler. Ich denke, ich muss mit einem benutzerspezifischen Schlüssel schützen, jetzt müssen Sie nur herausfinden, wie. :) Danke für Ihre Antwort! Mike – MikeScott8

1

Also habe ich es funktioniert.

  1. entfernt alte Benutzer-Konto von Laptop
  2. Reset app.config Abschnitt haben nicht
  3. entfernt Schlüsseldatei von allen Benutzern Maschinentasten geschützt
  4. App lief und erlaubt es den Abschnitt
zu schützen

Aber all dies tat war es für diesen Benutzer arbeiten.

Jetzt muss ich wissen, was ich tun muss, um den Code zu ändern, um den Abschnitt zu schützen, so dass mehrere Benutzer auf einem PC die Anwendung verwenden können. Virtual PC hier komme ich (gut nach dem Urlaub zu WDW morgen bis nächsten Mittwoch)!

ein Ratschlag, der mir hilft, in die richtige Richtung zu zeigen, da ich in diesem RSA-Verschlüsselungstyp-Zeug nicht sehr erfahren bin.

1

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

Kopieren und Einfügen: D

Montag, 12. Februar 2007 00.15 Uhr von Naica

re: Encrypting Konfigurationsdateien geschützt Konfiguration

Hier eine Liste aller Schritte, die ich unternommen habe, um zwei Abschnitte auf meinem PC zu verschlüsseln und sie dann auf dem WebServer bereitzustellen. Vielleicht wird es jemandem helfen ...:

:

  1. Um eine Maschinenebene RSA-Schlüsselcontainer

    aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp 
    
  2. Fügen Sie diese auf web.config vor connection Abschnitt zu erstellen

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

    Sie die <clear /> von oben nicht entgehen lassen! Wichtig beim Spielen mit Enkripting/Decripting viele Male

  3. Aktivieren Sie dies, um dies am Anfang der Datei Web.Config zu haben. Wenn es fehlt hinzufügen:

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
    
  4. Speichern und schließen Web.Config-Datei in VS (! Sehr wichtig)

  5. In Eingabeaufforderung (meinem lokalen PC) Fenster gehen zu:

    C: \ winnt \ Microsoft.NET \ Framework \ v2.0.50727

  6. Encrypt: (beachten Sie phisical Pfad für Ihre App zu ändern, oder verwenden Sie -app Option und Geben Sie den Namen o virtuelles Verzeichnis für App! Da ich VS auf meinem PC verwendet habe, bevorzugte ich die Balg-Option. Der Pfad ist der Pfad zur Datei Web.config)

    aspnet_regiis -pef "connection" "c: \ Bla \ Bla \ Bla" -PROV "DataProtectionConfigurationProvider"

    aspnet_regiis -pef "system.web/Mitgliedschaft" "c: \ Bla \ Bla \ Bla" -PROV "DataProtectionConfigurationProvider"

  7. zu entschlüsseln (wenn auch nur erforderlich!): (! wenn nur erforderlich)

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla" 
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla" 
    
  8. löschen Keys Container

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys" 
    
  9. Speichern Sie die oben genannten Schlüssel zu XML-Datei, um es von Ihrem lokalen PC auf den WebServer zu exportieren (UAT oder Produktion)

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri 
    
  10. Import der Schlüsselcontainer auf WebServer-Server:

    aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml 
    
  11. Grant-Zugriff auf den Schlüssel auf dem Webserver

    aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User" 
    

    Siehe in IIS den ASP.NET Benutzer oder -nutzung:

    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name 
    
  12. Entfernen Grant-Zugriff auf den Schlüssel auf dem Webserver (nur wenn erforderlich!)

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User" 
    
  13. Kopieren und einfügen, die verschlüsselte Datei Web.config WebServer.