Verwenden von DPAPI/ProtectedData in einer Webfarmumgebung mit dem Benutzerspeicher

Ich habe mich gefragt, ob jemand erfolgreich DPAPI mit einem Benutzerspeicher in einer Webfarm-Umgebung verwendet hat?

Da es sich bei unserer Anwendung um eine kürzlich von 1.1 auf 2.0 umgestellte ASP.NET-App handelt, verwenden wir einen benutzerdefinierten Wrapper, der direkt die Methoden CryptUnprotect aufruft. Dies sollte jedoch mit der ProtectedData </​​code> -Methode identisch sein, die im 2.0-Framework verfügbar ist.

Da wir in einer Webfarm-Umgebung arbeiten, können wir nicht garantieren, dass der Computer, der die Verschlüsselung durchgeführt hat, derjenige ist, der sie entschlüsselt. (Auch weil Maschinenfehler unsere verschlüsselten Daten nicht zerstören sollten).

Was wir also haben, ist eine Servicekomponente, die in einem Dienst unter einem bestimmten Benutzerkonto in jedem unserer Webboxen ausgeführt wird. Dieser Benutzer ist so eingerichtet, dass er gemäß der Empfehlung ein Roaming-Profil hat.

Das Problem, das wir haben, ist, dass Informationen, die auf einem Computer verschlüsselt wurden, nicht auf einem anderen entschlüsselt werden können, was mit dem Fehler win32 fehlschlägt:

'Schlüssel ist nicht gültig für den angegebenen Status'.

Ich vermute, dass dies daran liegt, dass ich einen Fehler gemacht habe, indem der Verschlüsselungsdienst als Benutzer auf mehreren Computern ausgeführt wurde, sodass der Benutzer sich gleichzeitig an mehreren Computern angemeldet hat.

Wenn dies das Problem ist, wie werden andere DPAPI mit dem Benutzerspeicher in einer Webfarm-Umgebung verwendet?

3
Hi, hast du die Antwort darauf bekommen? Ich habe das gleiche Problem.
hinzugefügt der Autor user6535, Quelle

3 Antworten

In einer Webfarm-Umgebung verwenden Sie DPAPI nicht zum direkten Verschlüsseln/Entschlüsseln von Daten, sondern zum Verschlüsseln des Schlüssels , den Sie später zum Entschlüsseln Ihrer geschützten Daten verwenden.

Sie würden den Schlüssel als Teil des Bereitstellungsprozesses auf jedem Server "installieren". Das Installationsskript muss unter der Identität des AppPools ausgeführt werden und könnte den verschlüsselten Schlüssel entweder in einer app.config-Datei oder in der Registrierung speichern.

Die verschlüsselten Daten selbst könnten in einem zentralen Repository/einer zentralen Datenbank gespeichert werden, so dass auf alle Server in der Farm zugegriffen werden kann. Um die Daten zu entschlüsseln, ruft die Webanwendung den verschlüsselten Schlüssel von der Stelle ab, an der er installiert wurde, verwendet DPAPI, um sie zu entschlüsseln, und verwendet dann das Ergebnis, um Daten zu entschlüsseln, die aus dem zentralen Repository stammen.

Der Nachteil besteht darin, dass der Klartextschlüssel möglicherweise während des ersten Installationsvorgangs für kurze Zeit auf der lokalen Festplatte vorhanden ist, wo er möglicherweise dem Betriebspersonal zur Verfügung gestellt wird. Sie könnten eine zusätzliche Verschlüsselungsschicht hinzufügen, z. B. mit dem web.config machineKey, falls dies ein Problem darstellt.

8
hinzugefügt
Dies ist bedauerlich, da einer der Vorteile von DPAPI darin besteht, dass der Hauptschlüssel alle 3 Monate automatisch abläuft und zuvor verschlüsselte Daten entschlüsselt werden können. msdn.microsoft.com/de-de/library/ms995355.aspx Zitat: "Dieses Ablaufdatum verhindert, dass ein Angreifer einen einzelnen MasterKey kompromittiert und auf alle geschützten Daten eines Benutzers zugreift." Wenn Sie Ihren eigenen Schlüssel verwenden, werden alle Ihre Daten veröffentlicht.
hinzugefügt der Autor ToddK, Quelle
Dies ist ein wenig veraltet, aber ich glaube, dass Sie den Schlüssel auch dann noch "sehen" können, wenn er in der Datei web.config enthalten und mit aspnet_regiis verschlüsselt ist. Ihr Ansatz ist das, wonach die meisten Menschen suchen, da es in ASP.NET oder der BCL keinen gleichartigen Mechanismus gibt.
hinzugefügt der Autor CodeMonkeyKing, Quelle

Ich habe das gerade gesehen. Es gibt eine Möglichkeit, wie Sie das einrichten können: Stellen Sie sicher, dass sich die Computer in der Farm in einer Domäne befinden, und verwenden Sie ein Domänenkonto zum Verschlüsseln und Entschlüsseln der Daten (dh, führen Sie die Anwendung unter dem Domänenkonto aus).

Sie können DPAPI nicht wie gewünscht mit lokalen Konten verwenden, da das Schlüsselmaterial nicht zwischen Servern ausgetauscht wird.

Ich hoffe, das hilft!

2
hinzugefügt

The Microsoft poster is wrong. http://support.microsoft.com/default.aspx?scid=kb;en-us;309408#6

"Damit DPAPI bei Verwendung von servergespeicherten Profilen ordnungsgemäß funktioniert, muss der Domänenbenutzer nur bei einem einzelnen Computer in der Domäne angemeldet sein. Wenn der Benutzer sich an einem anderen Computer in der Domäne anmelden möchte, muss er sich abmelden der erste Computer, bevor sich der Benutzer am zweiten Computer anmeldet. Wenn der Benutzer gleichzeitig bei mehreren Computern angemeldet ist, ist es wahrscheinlich, dass DPAPI vorhandene verschlüsselte Daten nicht korrekt entschlüsseln kann. "

Es scheint, dass DPAPI in einer Farmeinstellung nicht funktioniert. Ich denke, das ist ein ziemlich großes Versehen von Microsoft und macht DPAPI für die meisten Unternehmensanwendungen fast nutzlos.

1
hinzugefügt