Vorgehensweise: Verwenden von DPAPI (Computerspeicher) von ASP.NET aus
Auf dieser Seite
Zielsetzung
Betrifft
Verwendung dieses Moduls
Zusammenfassung
Vorbereitung
Erstellen einer ASP.NET-Clientwebanwendung
Testen der Anwendung
Ändern der Webanwendung zum Lesen einer verschlüsselten Verbindungszeichenfolge aus "Web.config"
Weitere Ressourcen
Zielsetzung
Themenbereiche:
Erstellen einer Webanwendung, die die in "Vorgehensweise: Erstellen einer DPAPI-Bibliothek" erstellte DPAPI-Verschlüsselungsbibliothek verwendet, um sicherheitsrelevante Daten zu ver- bzw. entschlüsseln
Lesen von verschlüsselten Daten aus Web.config
Betrifft
Die Informationen in diesem Modul gelten für folgende Produkte und Technologien:
Microsoft® Windows® XP oder Windows 2000 Server (mit Service Pack 3) und höhere Betriebssysteme
Microsoft .NET Framework Version 1.0 (mit Service Pack 2) und höhere Versionen
Microsoft Visual C#® .NET
Verwendung dieses Moduls
Empfehlungen für eine erfolgreiche Arbeit mit diesem Modul:
Sie müssen über Erfahrung in Visual C# .NET und Microsoft Visual Studio® .NET verfügen.
Sie sollten über Erfahrung in der Entwicklung von Webanwendungen mithilfe von ASP.NET verfügen.
Erstellen Sie die unter "Vorgehensweise: Erstellen einer DPAPI-Bibliothek" beschriebene DPAPI-Verschlüsselungsbibliothek. Diese Bibliothek bietet die Funktionalität, die in diesem Modul zum Ver- und Entschlüsseln von Daten verwendet wird.
Zusammenfassung
In Webanwendungen müssen häufig sicherheitsrelevante Daten wie Datenbank-Verbindungszeichenfolgen und Anmeldeinformationen von Dienstkonten in Konfigurationsdateien gespeichert werden. Aus Sicherheitsgründen sollten solche Informationen niemals im Klartext gespeichert und vor dem Speichern immer verschlüsselt werden.
In diesem Modul wird beschrieben, wie die DPAPI-Verschlüsselungsbibliothek, die in "Vorgehensweise: Erstellen einer DPAPI-Bibliothek" aus einer ASP.NET-Anwendung erstellt wurde, zum Schutz sicherheitsrelevanter Daten verwendet werden kann. Außerdem erfahren Sie, wie Sie verschlüsselte Informationen lesen können, die in der Datei Web.config gespeichert wurden. In diesem Modul wird der computerbasierte DPAPI-Schlüsselspeicher beschrieben.
Vorbereitung
Bevor Sie mit diesem Modul beginnen, sollten Sie sich über folgende Punkte im Klaren sein:
Die DPAPI kann entweder mit dem Computerspeicher oder mit dem Benutzerspeicher arbeiten (was ein geladenes Benutzerprofil voraussetzt). Standardmäßig verwendet die DPAPI den Benutzerspeicher, Sie können jedoch auch festlegen, dass der Computerspeicher verwendet werden soll, indem Sie das Flag CRYPTOPROTECT_LOCAL_MACHINE an die DPAPI-Funktionen übergeben.
Mit dem Benutzerprofil wird eine zusätzliche Sicherheitsschicht eingezogen, da es den Zugriff auf die geheimen Daten weiter einschränkt. Nur der Benutzer, der die Daten verschlüsselt, kann sie auch wieder entschlüsseln. Allerdings erfordert das Benutzerprofil zusätzlichen Entwicklungsaufwand, wenn die DPAPI von einer ASP.NET-Anwendung verwendet werden soll, da Sie explizite Schritte zum Laden und Entladen des Benutzerprofils unternehmen müssen. Grund: ASP.NET lädt Benutzerprofile nicht automatisch.
Der Computerspeicheransatz (der in dieser Vorgehensweise verwendet wird) ist einfacher zu entwickeln, da er keine Benutzerprofilverwaltung voraussetzt. Wird hierbei jedoch kein zusätzlicher Entropieparameter verwendet, ist dieser Ansatz weniger sicher, da jeder Benutzer des Computers Daten entschlüsseln kann. (Unter Entropie wird in diesem Zusammenhang ein Zufallswert verstanden, der das Dechiffrieren der Geheimdaten schwieriger macht.) Das Problem bei der Verwendung eines zusätzlichen Entropieparameters besteht darin, dass dieser Wert von der Anwendung ebenfalls sicher gespeichert werden muss, woraus sich wiederum ein Schlüsselverwaltungsproblem ergibt.
Hinweis: Wenn Sie die DPAPI mit dem Computerspeicher verwenden, ist die verschlüsselte Zeichenfolge für den jeweiligen Computer spezifisch. Daher müssen die verschlüsselten Daten auf jedem Computer erzeugt werden. Sie können die verschlüsselten Daten nicht auf andere Computer in einer Farm oder in einem Cluster kopieren.
Weitere Informationen über die Verwendung der DPAPI mit dem Benutzerspeicher von einer ASP.NET-Webanwendung aus (unter Verwendung einer Serviced Component in einer Enterprise Services-Anwendung) finden Sie unter "Vorgehensweise: Verwenden von DPAPI (Benutzerspeicher) von ASP.NET aus mit Enterprise Services" in diesem Handbuch.
Erstellen einer ASP.NET-Clientwebanwendung
In diesem Verfahren wird eine ASP.NET-Clientwebanwendung erstellt, die die DPAPI-Klassenbibliothek zum Ver- und Entschlüsseln von in der Datei Web.config gespeicherten Daten aufruft.
So erstellen Sie eine ASP.NET-Clientwebanwendung
Starten Sie Visual Studio .NET und erstellen Sie eine neue Visual C# ASP.NET-Webanwendung mit Namen DPAPIClientWeb.
Fügen Sie einen Verweis auf die Assembly DataProtector.dll hinzu, die mit dem unter "Vorgehensweise: Erstellen einer DPAPI-Bibliothek" erläuterten Verfahren erstellt wurde.
Öffnen Sie WebForm1.aspx und fügen Sie am Anfang der Datei unterhalb der vorhandenen using-Anweisungen die folgenden using-Anweisungen hinzu.
using System.Text; using DataProtection;
Fügen Sie WebForm1.aspx die in Tabelle 1 aufgeführten Steuerelemente hinzu.
Tabelle 1: Steuerelemente für "WebForm1.aspx"
Typ des Steuerelements Text ID Schaltfläche Verschlüsseln btnEncrypt Schaltfläche Entschlüsseln btnDecrypt Textfeld txtDataToEncrypt Textfeld txtEncryptedData Textfeld txtDecryptedData Bezeichnungsfeld lblError Bezeichnungsfeld Zu verschlüsselnde Daten Bezeichnungsfeld Verschlüsselte Daten Bezeichnungsfeld Entschlüsselte Daten Das Webformular sollte ähnlich dem in Abbildung 1 dargestellten aussehen.
Abbildung 1
Webformular für DPAPIClientWebDoppelklicken Sie auf die Schaltfläche Verschlüsseln, um einen Ereignishandler für das Klickereignis der Schaltfläche zu erstellen.
DataProtector dp = new DataProtector( DataProtector.Store. USE_MACHINE_STORE );try { byte[] dataToEncrypt = Encoding.ASCII.GetBytes(txtDataToEncrypt.Text); // Not passing optional entropy in this example // Could pass random value (stored by the application) for added security // when using DPAPI with the machine store. txtEncryptedData.Text = Convert.ToBase64String(dp.Encrypt(dataToEncrypt,null)); } catch(Exception ex) { lblError.ForeColor = Color.Red; lblError.Text = "Exception.<br>" + ex.Message; return; } lblError.Text = "";
Kehren Sie zum Webformular zurück und doppelklicken Sie auf die Schaltfläche Entschlüsseln. Fügen Sie dem Ereignishandler für das Klickereignis der Schaltfläche den folgenden Code hinzu.
DataProtector dp = new DataProtector(DataProtector. Store.USE_MACHINE_STORE);try { byte[] dataToDecrypt = Convert.FromBase64String(txtEncryptedData.Text); // Optional entropy parameter is null. // If entropy was used within the Encrypt method, the same entropy parameter // must be supplied here txtDecryptedData.Text = Encoding.ASCII.GetString(dp.Decrypt(dataToDe crypt,null)); } catch(Exception ex) { lblError.ForeColor = Color.Red; lblError.Text = "Exception.<br>" + ex.Message; return; } lblError.Text = "";
Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
Testen der Anwendung
In diesem Verfahren wird die Webanwendung getestet, um sicherzustellen, dass die Daten erfolgreich ver- und entschlüsselt werden.
So testen Sie die Anwendung
Drücken Sie STRG+F5, um die Webanwendung auszuführen.
Geben Sie eine Zeichenfolge in das Textfeld Zu verschlüsselnde Daten ein und klicken Sie dann auf Verschlüsseln.
Vergewissern Sie sich, dass die verschlüsselten Daten (Verschlüsselungsformat Base64) im Textfeld Verschlüsselte Daten angezeigt werden.Klicken Sie auf die Schaltfläche Entschlüsseln.
Vergewissern Sie sich, dass die verschlüsselten Daten erfolgreich entschlüsselt wurden und im Textfeld Entschlüsselte Daten angezeigt werden.
Ändern der Webanwendung zum Lesen einer verschlüsselten Verbindungszeichenfolge aus "Web.config"
Mit diesem Verfahren wird eine verschlüsselte Datenbank-Verbindungszeichenfolge in einem <appSettings>-Element in der Datei Web.config der Anwendung platziert. Anschließend fügen Sie Code zum Lesen und Entschlüsseln dieser Zeichenfolge aus der Konfigurationsdatei hinzu.
So ändern Sie die Webanwendung zum Lesen einer verschlüsselten Verbindungszeichenfolge aus "Web.config"
Kehren Sie zu Visual Studio .NET zurück und zeigen Sie WebForm1.aspx im Entwurfsmodus an.
Fügen Sie dem Formular eine weitere Schaltfläche hinzu. Legen Sie die Text-Eigenschaft auf Decrypt string from config file und die ID-Eigenschaft auf btnDecryptConfig fest.
Doppelklicken Sie auf die Schaltfläche, um einen Ereignishandler für das Klickereignis der Schaltfläche zu erstellen.
Fügen Sie am Anfang der Datei unterhalb der vorhandenen using-Anweisungen die folgende using-Anweisung hinzu.
using System.Configuration;
Kehren Sie zum Ereignishandler btnDecryptConfig_Click zurück und fügen Sie den folgenden Code hinzu, um eine Datenbank-Verbindungszeichenfolge aus dem Abschnitt <appSettings> der Datei Web.config abzurufen.
DataProtector dp = new DataProtector(DataProtector. Store.USE_MACHINE_STORE);try { string appSettingValue = ConfigurationSettings.AppSettings["connectionString"]; byte[] dataToDecrypt = Convert.FromBase64String(app SettingValue); string connStr = Encoding.ASCII.GetString( dp.Decrypt(dataToDecrypt,null)); txtDecryptedData.Text = connStr; } catch(Exception ex) { lblError.ForeColor = Color.Red; lblError.Text = "Exception.<br>" + ex.Message; return; } lblError.Text = "";
Klicken Sie im Menü Erstellen auf Projektmappe erstellen, um die Projekte neu zu erstellen.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf WebForm1.aspx und dann auf In Browser anzeigen.
Geben Sie eine Datenbank-Verbindungszeichenfolge wie die folgende in das Feld Zu verschlüsselnde Daten ein.
server=(local);Integrated Security=SSPI; database=Northwind
Klicken Sie auf die Schaltfläche Verschlüsseln.
Markieren Sie den verschlüsselten Chiffrierungstext und kopieren Sie ihn in die Zwischenablage.
Wechseln Sie zu Visual Studio.NET, öffnen Sie Web.config und fügen Sie außerhalb des <system.web>-Elements das folgende <appSettings>-Element hinzu. Weisen Sie die verschlüsselte Verbindungszeichenfolge, die sich gegenwärtig in der Zwischenablage befindet, dem value-Attribut zu.
<appSettings> <add key="connectionString" value="encrypted connection string" /> </appSettings>
Speichern Sie die Datei Web.config.
Klicken Sie auf die Schaltfläche Decrypt string from config file und vergewissern Sie sich, dass die verschlüsselte Datenbank-Verbindungszeichenfolge erfolgreich aus der Datei Web.config ausgelesen werden konnte und im Feld Entschlüsselte Daten angezeigt wird.
Weitere Ressourcen
Weitere Informationen finden Sie in den verwandten Modulen: