Vorgehensweise: Speichern von verschlüsselten Verbindungszeichenfolgen in der Registrierung
Auf dieser Seite
Zielsetzung
Betrifft
Verwendung dieses Moduls
Zusammenfassung
Benötigte Kenntnisse
Speichern der verschlüsselten Daten in der Registrierung
Erstellen einer ASP.NET-Webanwendung
Weitere Ressourcen
Zielsetzung
Themenbereiche:
Speichern von verschlüsselten Datenbank-Verbindungszeichenfolgen in der Registrierung
Lesen und Entschlüsseln von verschlüsselten Datenbank-Verbindungszeichenfolgen in der Registrierung
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 sollten über Erfahrung in der Programmierung mit Visual C# .NET verfügen.
Sie müssen über Erfahrung mit der Entwicklungsumgebung 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 Verschlüsselungsbibliothek" beschriebene generische Verschlüsselungsbibliothek. Diese Bibliothek bietet die Funktionalität, die in diesem Modul zur Ver- und Entschlüsselung der Datenbank-Verbindungszeichenfolge verwendet wird.
Lesen Sie "Sicheres Speichern von Datenbank-Verbindungszeichenfolgen" in Modul 12, "Datenzugriffssicherheit". In diesem Modul finden Sie Informationen zu Verfahren für die sichere Speicherung von Datenbank-Verbindungszeichenfolgen.
Zusammenfassung
Die Frage, wo Datenbank-Verbindungszeichenfolgen sicher gespeichert werden können, beschäftigt alle Entwickler, die Anwendungen schreiben, die auf Datenbanken zugreifen müssen. Ein möglicher Speicherort ist die Registrierung. Einzelne Registrierungsschlüssel können zwar mit Microsoft® Windows®-ACLs (Access Control Lists, Zugriffssteuerungslisten) gesichert werden, Sie sollten aber Verbindungszeichenfolgen nur verschlüsselt speichern, um die Sicherheit zu erhöhen.
In diesem Modul wird erläutert, wie Sie eine verschlüsselte Datenbank-Verbindungszeichenfolge in der Registrierung speichern und mithilfe einer ASP.NET-Webanwendung abrufen. Hier wird die generische Verschlüsselungsbibliothek verwendet, die in "Vorgehensweise: Erstellen einer Verschlüsselungsbibliothek" erstellt wurde.
Benötigte Kenntnisse
Bevor Sie mit diesem Modul beginnen, sollten Sie sich über folgende Punkte im Klaren sein:
Die Verbindungszeichenfolge, der Initialisierungsvektor und der Schlüssel für die Verschlüsselung werden in der Registrierung als benannte Werte unter dem folgenden Registrierungsschlüssel gespeichert:
HKEY_LOCAL_MACHINE\Software\TestApplication
Initialisierungsvektor und Schlüssel müssen gespeichert werden, damit die Verbindungszeichenfolge entschlüsselt werden kann.
Speichern der verschlüsselten Daten in der Registrierung
Mit diesem Verfahren wird eine Windows-Anwendung erstellt, die zum Verschlüsseln und Speichern einer Datenbank-Verbindungszeichenfolge in der Registrierung genutzt wird.
So speichern Sie die verschlüsselten Daten in der Registrierung
Starten Sie Visual Studio .NET und erstellen Sie mit Visual C# ein neues Windows-Projekt mit Namen EncryptionTestApp.
Fügen Sie einen Assemblyverweis auf die Assembly Encryption.dll hinzu.
Zum Erstellen dieser Assembly führen Sie die unter "Vorgehensweise: Erstellen einer Verschlüsselungsbibliothek" in diesem Handbuch genannten Schritte durch.Fügen Sie am Anfang von Form1.cs unterhalb der vorhandenen using-Anweisungen die folgende using-Anweisungen hinzu.
using Encryption; using System.Text; using Microsoft.Win32;
- Fügen Sie Form1 die in Tabelle 1 aufgeführten Steuerelemente hinzu und ordnen Sie diese wie in Abbildung 1 gezeigt an.
Tabelle 1: Steuerelemente für "EncryptionTestApp"
Steuerelement | Text | ID |
---|---|---|
Bezeichnungsfeld | Verbindungszeichenfolge: | |
Textfeld | txtConnectionString | |
Bezeichnungsfeld | Schlüssel: | |
Textfeld | txtKey | |
Bezeichnungsfeld | Initialisierungsvektor: | |
Textfeld | txtInitializationVector | |
Bezeichnungsfeld | Verschlüsselte Zeichenfolge | |
Textfeld | txtEncryptedString | |
Bezeichnungsfeld | Entschlüsselte Zeichenfolge | |
Textfeld | txtDecryptedString | |
Schaltfläche | Verschlüsseln | btnEncrypt |
Schaltfläche | Entschlüsseln | btnDecrypt |
Schaltfläche | Registrierungsdaten schreiben | btnWriteRegistryData |
Abbildung 1
Dialogfeld Testgeschirr für Verschlüsselungstests
- Legen Sie die Text-Eigenschaft von txtConnectionString wie folgt fest:
"Server=local; database=pubs; uid=Bob; pwd=Kennwort"
- Legen Sie die Text-Eigenschaft von txtKey wie folgt fest:
"0123456789012345"
Die Schlüssellänge beträgt 16 Byte, damit der 3DES-Verschlüsselungsalgorithmus verwendet werden kann.
- Legen Sie die Text-Eigenschaft von Form1 wie folgt fest:
"Testgeschirr für Verschlüsselungstests"
- Doppelklicken Sie auf die Schaltfläche Verschlüsseln, um einen Ereignishandler für das Klickereignis der Schaltfläche zu erstellen, und fügen Sie dem Ereignishandler den nachstehenden Code hinzu.
try { // Erstellen Sie das Encryptorobjekt, und geben Sie dabei 3DES als // Verschlüsselungsalgorithmus an Encryptor enc = new Encryptor(EncryptionAlgorithm.TripleDes); // Rufen Sie die Verbindungszeichenfolge als Bytearray ab byte[] plainText = Encoding.ASCII.GetBytes(txtConnectionString.Text); byte[] key = Encoding.ASCII.GetBytes(txtKey.Text); // Führen Sie die Verschlüsselung durch byte[] cipherText = enc.Encrypt(plainText, key); // Speichern Sie den Initialisierungsvektor, da dieser für die // Entschlüsselung erforderlich ist txtInitializationVector.Text = Encoding.ASCII.GetString(enc.IV); // Verschlüsselte Zeichenfolge anzeigen txtEncryptedString.Text = Convert.ToBase64String(cipherText); } catch(Exception ex) { MessageBox.Show("Ausnahme beim Verschlüsseln: " + ex.Message, "Testgeschirr für Verschlüsselungstests"); }
Kehren Sie zu Form1 zurück, wechseln Sie ggf. in den Entwurfsmodus und doppelklicken Sie auf die Schaltfläche Entschlüsseln, um einen Ereignishandler für das Klickereignis der Schaltfläche zu erstellen.
Fügen Sie dem Ereignishandler für das Klickereignis der Schaltfläche Verschlüsseln den folgenden Code hinzu.
try { // Decryptorobjekt einrichten Decryptor dec = new Decryptor(EncryptionAlgorithm.TripleDes); // Initialisierungsvektor festlegen dec.IV = Encoding.ASCII.GetBytes(txtInitializationVector.Text); byte[] key = Encoding.ASCII.GetBytes(txtKey.Text); // Verschlüsselung durchführen byte[] plainText = dec.Decrypt(Convert.FromBase64String( txtEncryptedString.Text), key); // Entschlüsselte Zeichenfolge anzeigen. txtDecryptedString.Text = Encoding.ASCII.GetString(plainText); } catch(Exception ex) { MessageBox.Show("Ausnahme beim Entschlüsseln:. " + ex.Message, "Testgeschirr für Verschlüsselungstests"); }
Kehren Sie zu Form1 zurück, wechseln Sie ggf. in den Entwurfsmodus und doppelklicken Sie auf die Schaltfläche Registrierungsdaten schreiben, um einen Ereignishandler für das Klickereignis der Schaltfläche zu erstellen.
Fügen Sie dem Ereignishandler den folgenden Code hinzu.
// Registrierungsschlüssel und benannte Werte erstellen RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software",true); rk = rk.CreateSubKey("TestApplication"); // Verschlüsselte Zeichenfolge, Initialisierungsvektor und Schlüssel in die Registrierung schreiben rk.SetValue("connectionString",txtEncryptedString.Text); rk.SetValue("initVector",Convert.ToBase64String( Encoding.ASCII.GetBytes(txtInitializationVector.Text))); rk.SetValue("key",Convert.ToBase64String(Encoding.ASCII.GetBytes( txtKey.Text))); MessageBox.Show("Die Daten wurden erfolgreich in die Registrierung geschrieben");
Führen Sie die Anwendung aus und klicken Sie dann auf Verschlüsseln.
Die verschlüsselte Verbindungszeichenfolge wird im Feld Verschlüsselte Zeichenfolge angezeigt.Klicken Sie auf Entschlüsseln.
Die ursprüngliche Verbindungszeichenfolge wird im Feld Entschlüsselte Zeichenfolge angezeigt.Klicken Sie auf Registrierungsdaten schreiben.
Klicken Sie im Meldungsfenster auf OK.
Führen Sie Regedit.exe aus und zeigen Sie den Inhalt des folgenden Schlüssels an.
HKLM\Software\TestApplication
Vergewissern Sie sich, dass die verschlüsselten Werte für die benannten Werte connectionString, initVector und Schlüssel vorhanden sind.
- Schließen Sie den Registrierungseditor und die Testgeschirr-Anwendung.
Erstellen einer ASP.NET-Webanwendung
In diesem Verfahren wird eine einfache ASP.NET-Webanwendung entwickelt, die die verschlüsselte Verbindungszeichenfolge aus der Registrierung abruft und diese entschlüsselt.
- So erstellen Sie eine ASP.NET-Anwendung
Erstellen Sie mit Visual C# eine neue ASP.NET-Webanwendung mit Namen EncryptionWebApp.
Fügen Sie einen Assemblyverweis auf die Assembly Encryption.dll hinzu.
Zum Erstellen dieser Assembly führen Sie die unter "Vorgehensweise: Erstellen einer Verschlüsselungsbibliothek" in diesem Handbuch genannten Schritte durch.Öffnen Sie WebForm1.aspx.cs und fügen Sie am Anfang der Datei unterhalb der vorhandenen using-Anweisungen die folgenden using-Anweisungen hinzu.
using Encryption; using System.Text; using Microsoft.Win32;
- Fügen Sie WebForm1.aspx die in Tabelle 2 aufgeführten Steuerelemente hinzu.
Tabelle 2: Steuerelemente für "WebForm1.aspx"
Steuerelement | Text | ID |
---|---|---|
Bezeichnungsfeld | lblEncryptedString | |
Bezeichnungsfeld | lblDecryptedString | |
Schaltfläche | Get Connection String | btnGetConnectionString |
RegistryKey rk = Registry.LocalMachine.OpenSubKey( @"Software\TestApplication",false); lblEncryptedString.Text = (string)rk.GetValue("connectionString");string initVector = (string)rk.GetValue("initVector"); string strKey = (string)rk.GetValue("Schlüssel"); Decryptor dec = new Decryptor(EncryptionAlgorithm.TripleDes ); dec.IV = Convert.FromBase64String(initVector); // Zeichenfolge entschlüsseln byte[] plainText = dec.Decrypt(Convert.FromBase64String( lblEncryptedString.Text), Convert.FromBase64String(strKey)); lblDecryptedString.Text = Encoding.ASCII.GetString(plainText); </pre>
Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf WebForm1.aspx und dann auf In Browser anzeigen.
Klicken Sie auf Get Connection String.
Die ver- und entschlüsselten Verbindungszeichenfolgen werden im Webformular angezeigt.
Weitere Ressourcen
Weitere Informationen finden Sie unter "Vorgehensweise: Erstellen einer Verschlüsselungsbibliothek" in diesem Handbuch.