Frage

Ich stoße auf ein Problem, das ich schon einmal hatte;Ich kann meine Referenz zur Lösung des Problems nicht finden.

Hier ist das Problem.Wir verschlüsseln den Abschnitt mit den Verbindungszeichenfolgen in der app.config für unsere Clientanwendung mit dem folgenden Code:

        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äuferurlaub hatten.Der alte Laptop geht an einen neuen Verkäufer und unter dem Login des neuen Benutzers wird beim Versuch, dies zu tun, eine Fehlermeldung angezeigt.Der Fehler ist:

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
War es hilfreich?

Lösung 2

Ich habe eine elegantere Lösung gefunden als in meiner ursprünglichen Antwort an mich selbst.Ich habe herausgefunden, dass ich mich einfach als der Benutzer angemeldet habe, der die Anwendung ursprünglich installiert und die Verbindungszeichenfolgen der Konfigurationsdatei verschlüsselt hat, und in einer Eingabeaufforderung zum .net-Framework-Verzeichnis gehe und sie ausführe

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

Es erteilte dem anderen Benutzer die Berechtigung, auf den RSA-Verschlüsselungsschlüsselcontainer zuzugreifen, und funktioniert dann für den/die anderen Benutzer.

Ich wollte es nur hier hinzufügen, da ich dachte, ich hätte dieses Problem in unserem Entwicklerblog gebloggt, es aber hier gefunden habe. Falls ich es also noch einmal nachschlagen muss, werde ich es hier finden.Ich werde in diesem Thread auch einen Link zu unserem Entwickler-Blogpunkt hinzufügen.

Andere Tipps

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:Konfigurationsdateien mit geschützter Konfiguration verschlüsseln

Hier ist eine Liste aller Schritte, die ich durchgeführt habe, um zwei Abschnitte auf meinem PC zu verschlüsseln und sie dann auf dem Webserver bereitzustellen.Vielleicht hilft es jemandem...:

  1. So erstellen Sie einen RSA-Schlüsselcontainer auf Maschinenebene

    aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
    
  2. Fügen Sie dies zu web.config vor dem Abschnitt „connectionStrings“ hinzu:

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

    Verpassen Sie das nicht <clear /> von oben!Wichtig, wenn Sie mehrmals mit dem Verschlüsseln/Entschlüsseln spielen

  3. Überprüfen Sie, ob dies oben in der Web.Config-Datei steht.Falls fehlend, fügen Sie es hinzu:

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

  5. Gehen Sie im Eingabeaufforderungsfenster (mein lokaler PC) zu:

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

  6. Verschlüsseln:(Achten Sie darauf, den physischen Pfad für Ihre App zu ändern oder die Option -app zu verwenden und den Namen des virtuellen Verzeichnisses für die App anzugeben!Da ich VS auf meinem PC verwendet habe, habe ich die unten stehende Option bevorzugt.Der Pfad ist der Pfad zur Web.config-Datei)

    aspnet_regiis -pef "connectionStrings" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"

    aspnet_regiis -pef "system.web/membership" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"

  7. Zum Entschlüsseln (nur bei Bedarf!):

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla"
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla"
    
  8. Schlüsselcontainer löschen (nur bei Bedarf!)

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
    
  9. Speichern Sie den obigen Schlüssel in einer XML-Datei, um ihn von Ihrem lokalen PC auf den Webserver (UAT oder Produktion) zu exportieren.

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri
    
  10. Importieren Sie den Schlüsselcontainer auf WebServer-Servern:

    aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml
    
  11. Gewähren Sie Zugriff auf den Schlüssel auf dem Webserver

    aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User"
    

    Sehen Sie sich in IIS den ASP.NET-Benutzer an oder verwenden Sie:

    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
    
  12. Entfernen Zugriff auf den Schlüssel auf dem Webserver gewähren (Nur bei Bedarf!)

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User"
    
  13. Kopieren Sie die verschlüsselte Web.config-Datei und fügen Sie sie in den WebServer ein.

Also habe ich es zum Laufen gebracht.

  1. Altes Benutzerkonto vom Laptop entfernt
  2. Setzen Sie app.config zurück, damit der Abschnitt nicht geschützt ist
  3. Die Schlüsseldatei wurde von allen Computerschlüsseln des Benutzers entfernt
  4. Habe die App ausgeführt und zugelassen, dass sie den Abschnitt schützt

Aber alles, was dies bewirkte, war, dass es für diesen Benutzer funktionierte.

JETZT muss ich wissen, was ich tun muss, um den Code zu ändern, um den Abschnitt zu schützen, damit mehrere Benutzer auf einem PC die Anwendung verwenden können.Virtueller PC, ich komme (nach dem WDW-Urlaub von morgen bis nächsten Mittwoch)!

Irgendein Rat, der mir den richtigen Weg weist, da ich in diesem Bereich der RSA-Verschlüsselung nicht sehr erfahren bin.

Klingt nach einem Berechtigungsproblem.Hat der betreffende (neue) Benutzer Schreibrechte für die Datei app.config?War der vorherige Benutzer ein lokaler Administrator oder Poweruser, der dieses Problem hätte verbergen können?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top