Vorgehensweise: Speichern von verschlüsselten Verbindungszeichenfolgen in der Registrierung

* * *

Auf dieser Seite

Zielsetzung Zielsetzung
Betrifft Betrifft
Verwendung dieses Moduls Verwendung dieses Moduls
Zusammenfassung Zusammenfassung
Benötigte Kenntnisse Benötigte Kenntnisse
Speichern der verschlüsselten Daten in der Registrierung Speichern der verschlüsselten Daten in der Registrierung
Erstellen einer ASP.NET-Webanwendung Erstellen einer ASP.NET-Webanwendung
Weitere Ressourcen 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

    1. Starten Sie Visual Studio .NET und erstellen Sie mit Visual C# ein neues Windows-Projekt mit Namen EncryptionTestApp.

    2. 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.

    3. 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;
  1. 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
![Dialogfeld Testgeschirr für Verschlüsselungstests](images/Cc431320.secmod25_01(de-de,MSDN.10).jpg)

Abbildung 1
Dialogfeld Testgeschirr für Verschlüsselungstests

  1. Legen Sie die Text-Eigenschaft von txtConnectionString wie folgt fest:
"Server=local; database=pubs; uid=Bob; pwd=Kennwort"
  1. 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.

  1. Legen Sie die Text-Eigenschaft von Form1 wie folgt fest:
"Testgeschirr für Verschlüsselungstests"
  1. 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");
}
  1. 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.

  2. 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");
    }
    
  3. 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.

  4. 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");
    
  5. Führen Sie die Anwendung aus und klicken Sie dann auf Verschlüsseln.
    Die verschlüsselte Verbindungszeichenfolge wird im Feld Verschlüsselte Zeichenfolge angezeigt.

  6. Klicken Sie auf Entschlüsseln.
    Die ursprüngliche Verbindungszeichenfolge wird im Feld Entschlüsselte Zeichenfolge angezeigt.

  7. Klicken Sie auf Registrierungsdaten schreiben.

  8. Klicken Sie im Meldungsfenster auf OK.

  9. 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.

  1. 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
  1. Erstellen Sie mit Visual C# eine neue ASP.NET-Webanwendung mit Namen EncryptionWebApp.

  2. 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.

  3. Ö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;
  1. 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
5. Doppelklicken Sie auf die Schaltfläche **Get Connection String**, um einen Ereignishandler für das Klickereignis der Schaltfläche zu erstellen. 6. Fügen Sie dem Ereignishandler den folgenden Code hinzu.
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>
  1. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf WebForm1.aspx und dann auf In Browser anzeigen.

  3. 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.