Freigeben über


Exemplarische Vorgehensweise: Erstellen und Exportieren eines RSA-Schlüsselcontainers

Aktualisiert: November 2007

Gibt eine schrittweise Anleitung zum Erstellen, Exportieren und Importieren eines Verschlüsselungsschlüssels für das Entschlüsseln von verschlüsselten Web.config-Abschnitten aus einer einzelnen verschlüsselten Datei auf mehreren Servern.

Die geschützte Konfiguration trägt zur Steigerung der Anwendungssicherheit bei, da vertrauliche Informationen in einer Konfigurationsdatei verschlüsselt werden können. Die Konfigurationsdatei wird zum Verarbeitungszeitpunkt automatisch von .NET Framework entschlüsselt. Die Entschlüsselung erfordert keinen zusätzlichen Code. Sie können aspnet_regiis.exe verwenden, um Abschnitte der Konfigurationsdatei zu verschlüsseln und Verschlüsselungsschlüssel zu verwalten. Weitere Informationen über die geschützte Konfiguration finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.

Mithilfe der geschützten Konfiguration können Sie benutzerdefinierte Verschlüsselungsschlüssel zur Verwendung mit dem RsaProtectedConfigurationProvider erstellen, löschen, exportieren und importieren. Dadurch können Sie Sicherungskopien von Verschlüsselungsschlüsseln erstellen oder einen Verschlüsselungsschlüssel auf mehrere Webserver (z. B. eine Webfarm) kopieren. Eine Anwendung mit einer verschlüsselten Datei Web.config kann somit an mehrere Speicherorte kopiert werden.

Im Rahmen dieser exemplarischen Vorgehensweise erhalten Sie Informationen zu folgenden Themen:

  • Erstellen eines benutzerdefinierten RSA-Schlüsselcontainers.

  • Angeben eines geschützten Konfigurationsanbieters, der einen benutzerdefinierten RSA-Schlüsselcontainer verwendet.

  • Verschlüsseln von Abschnitten einer Datei Web.config mit einem benutzerdefinierten RSA-Schlüsselcontainer.

  • Exportieren eines benutzerdefinierten RSA-Schlüsselcontainers in eine XML-Datei.

  • Importieren eines benutzerdefinierten RSA-Schlüsselcontainers aus einer XML-Datei.

Vorbereitungsmaßnahmen

Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

Erstellen eines benutzerdefinierten RSA-Schlüsselcontainers

In diesem Teil der exemplarischen Vorgehensweise erstellen Sie einen RSA-Schlüsselcontainer, indem Sie aspnet_regiis.exe mit der -pc-Option ausführen. Dadurch wird der RSA-Schlüsselcontainer als Schlüsselcontainer auf Benutzerebene identifiziert. RSA-Schlüsselcontainer müssen entweder der Benutzerebene (durch Verwenden der -pku-Option) oder der Computerebene (durch Weglassen der -pku-Option) zugeordnet werden. Weitere Informationen über RSA-Schlüsselcontainer auf Computerebene und auf Benutzerebene finden Sie unter RSA-Schlüsselcontainer auf Computerebene und Benutzerebene.

So erstellen Sie einen RSA-Schlüsselcontainer auf Computerebene

  1. Öffnen Sie eine Eingabeaufforderung.

    • Klicken Sie dazu in Microsoft Windows auf Start und dann auf Ausführen. Geben Sie im Dialogfeld Öffnen die Zeichenfolge cmd ein, und klicken Sie auf OK.
  2. Wechseln Sie an der Eingabeaufforderung mit dem folgenden Befehl in das Verzeichnis von .NET Framework, Version 2.0:

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  3. Erstellen Sie einen neuen RSA-Schlüsselcontainer auf Computerebene, indem Sie aspnet_regiis.exe ausführen und dabei folgende Optionen verwenden:

    • Die -pc-Option, gefolgt vom Namen des RSA-Schlüsselcontainers, um das RSA-Schlüsselpaar zu erstellen.

    • Die -exp-Option, um sicherzustellen, dass der Schlüssel exportierbar ist.

    Mit dem folgenden Befehl wird der Schlüsselcontainer "MyKeys" erstellt.

    aspnet_regiis -pc "MyKeys" -exp

    Schließen Sie das Eingabeaufforderungsfenster nicht.

Gewähren von Lesezugriff auf einen RSA-Verschlüsselungsschlüssel

Damit ASP.NET verschlüsselte Daten in der Datei Web.config entschlüsseln kann, muss die Identität der ASP.NET-Anwendung über Lesezugriff auf den Verschlüsselungsschlüssel verfügen, mit dem die verschlüsselten Abschnitte ver- und entschlüsselt werden.

So gewähren Sie der ASP.NET-Identität Zugriff auf den RSA-Schlüsselcontainer

  1. Öffnen Sie einen Text-Editor, und kopieren Sie den folgenden Code in eine neue Datei.

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    
    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
  2. Speichern Sie die Datei unter dem Namen identity.aspx im Anwendungsverzeichnis.

  3. Öffnen Sie identity.aspx in einem Browser, um die Identität der ASP.NET-Anwendung zu bestimmen.

    Die imitierte Identität der ASP.NET-Anwendung wird im Browser angezeigt.

    Hinweis:

    Verwenden Sie in dieser exemplarischen Vorgehensweise keinen Identitätswechsel zur Authentifizierung für die Site. Verwenden Sie stattdessen nur die anonyme Authentifizierung als Identität der ASP.NET-Anwendung. Wenn in dieser exemplarischen Vorgehensweise die Identität der Anwendung der Benutzer-ID entspricht, mit der Sie gerade angemeldet sind, z. B. DOMAIN\userid, deaktivieren Sie den Identitätswechsel in der Datei Web.config der Anwendung. Um den Identitätswechsel zu deaktivieren, bearbeiten Sie die Datei Web.config, und entfernen Sie das <identity>-Element. Nachdem Sie diese Änderung vorgenommen haben, aktualisieren Sie identity.aspx im Browser, um die geänderte Identität der Anwendung anzuzeigen.

  4. Um der Identität Zugriff auf den RSA-Schlüsselcontainer zu gewähren, führen Sie an der Eingabeaufforderung aspnet_regiis.exe aus, und verwenden Sie dabei folgende Optionen:

    • Die -pa-Option, gefolgt vom Namen des RSA-Schlüsselcontainers ("MyKeys").

    • Die Identität der ASP.NET-Anwendung, wie im vorherigen Schritt bestimmt.

    Beispielsweise gewährt der folgende Befehl dem NETZWERKDIENST-Konto Zugriff auf den RSA-Schlüsselcontainer "MyKeys" auf Computerebene.

    Hinweis:

    Wenn auf einem Computer unter Windows Server 2003 der Identitätswechsel für eine ASP.NET-Anwendung in der Datei Web.config deaktiviert ist, dann ist die Identität, unter der die Anwendung ausgeführt wird, das NETZWERKDIENST-Konto (für ältere Versionen von Windows ist es das lokale ASPNET-Konto).

    aspnet_regiis -pa "MyKeys" "NT AUTHORITY\NETWORK SERVICE"

Angeben eines geschützten Konfigurationsanbieters

In diesem Teil der exemplarischen Vorgehensweise geben Sie in der Datei Web.config der ASP.NET-Anwendung eine Instanz eines geschützten Konfigurationsanbieters an. Die Instanz eines geschützten Konfigurationsanbieters, die den RSA-Schlüsselcontainer auf Computerebene mit dem Namen "MyKeys" verwendet, ist dabei die in der vorigen Prozedur erstellte Instanz.

So geben Sie eine Instanz des geschützten Konfigurationsanbieters an

  1. Öffnen Sie die Datei Web.config der ASP.NET-Anwendung in einem Text-Editor.

    • Falls für die ASP.NET-Anwendung keine Datei Web.config vorhanden ist, öffnen Sie einen Text-Editor, und kopieren Sie die Beispielkonfiguration in eine neue Datei. Speichern Sie die Datei unter dem Namen web.config im Verzeichnis der ASP.NET-Anwendung.
  2. Stellen Sie sicher, dass die Konfiguration ein <connectionStrings>-Element enthält, wie im folgenden Beispiel gezeigt.

    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  3. Fügen Sie einen <configProtectedData>-Abschnitt hinzu, der eine Instanz der RsaProtectedConfigurationProvider-Klasse mit dem Namen "MyProvider" enthält, die den RSA-Schlüsselcontainer auf Computerebene mit dem Namen "MyKeys", verwendet, wie im folgenden Beispiel gezeigt.

    <configuration>
       <configProtectedData>
          <providers>
             <add name="MyProvider"
                  type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0,
                        Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                        processorArchitecture=MSIL"
                  keyContainerName="MyKeys" 
                  useMachineContainer="true" />
          </providers>
       </configProtectedData>
    
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  4. Speichern und schließen Sie die Datei Web.config.

Verschlüsseln von Abschnitten der Datei Web.config

Sie haben jetzt eine Instanz der RsaProtectedConfigurationProvider-Klasse angegeben, die den RSA-Schlüsselcontainer "MyKeys" verwendet, wobei die Identität der ASP.NET-Anwendung über Lesezugriff auf "MyKeys" verfügt. Als Nächstes verschlüsseln Sie mit "MyKeys" Abschnitte der Datei Web.config der ASP.NET-Anwendung. Beim Verarbeiten der Datei Web.config werden diese Abschnitte von ASP.NET entschlüsselt.

So verschlüsseln Sie den <connectionStrings>-Abschnitt der Datei Web.config

  1. Führen Sie an der Eingabeaufforderung aspnet_regiis.exe aus. Verwenden Sie dabei folgende Optionen:

    • Die -pe-Option, gefolgt von "connectionStrings", um das <connectionStrings>-Element der Datei Web.config für die Anwendung zu verschlüsseln.

    • Die -app-Option, um den Namen der Anwendung zu identifizieren.

    • Die -prov-Option, gefolgt von "MyProvider", um den RsaProtectedConfigurationProvider-Anbieter zu identifizieren, der im vorherigen Abschnitt in der Datei Web.config angegeben wurde.

    Beispielsweise wird durch den folgenden Befehl der <connectionStrings>-Abschnitt der Datei Web.config der Anwendung MyApplication verschlüsselt.

    aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider"

  2. Öffnen Sie die Datei Web.config, und zeigen Sie den verschlüsselten Inhalt an.

    Der Inhalt entspricht ungefähr der folgenden Beispieldatei Web.config.

    <configuration>
       <configProtectedData>
          <providers>
             <add name="MyProvider"
                  type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0,
                        Culture=neutral, PublicKeyToken= b03f5f7f11d50a3a,
                        processorArchitecture=MSIL"
                  keyContainerName="MyKeys" 
                  useMachineContainer="true" />
          </providers>
       </configProtectedData>
    
       <connectionStrings configProtectionProvider="MyProvider">
          <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
             xmlns="http://www.w3.org/2001/04/xmlenc#">
             <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
             <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
                   <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
                   <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                      <KeyName>RSA Key
                      </KeyName>
                   </KeyInfo>
                   <CipherData>
                      <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo=
                      </CipherValue>
                   </CipherData>
                </EncryptedKey>
             </KeyInfo>
             <CipherData>
                <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE=
                </CipherValue>
             </CipherData>
          </EncryptedData>
       </connectionStrings>
    </configuration>
    
  3. Schließen Sie die Datei Web.config.

Zugreifen auf entschlüsselte Konfigurationseinstellungen

ASP.NET entschlüsselt den Inhalt der Datei Web.config automatisch beim Verarbeiten der Datei. Daher sind keine zusätzlichen Schritte nötig, um die verschlüsselten Konfigurationseinstellungen für die Verwendung durch andere ASP.NET-Features zu entschlüsseln oder auf die Werte im Code zuzugreifen. Sie können jedoch anhand der folgenden Schritte vorgehen, um die Einstellungen entschlüsselt anzuzeigen.

So zeigen Sie die entschlüsselten Konfigurationswerte an

  1. Öffnen Sie einen Text-Editor, und kopieren Sie den folgenden ASP.NET-Code in eine neue Datei.

    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Configuration" %>
    <script >
    
    Public Sub Page_Load()
    
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings
      ConnectionStringsGrid.DataBind()
    End Sub
    
    </script>
    <html>
    
    <body>
    
    <form >
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Configuration" %>
    <script >
    
    public void Page_Load()
    {
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings;
      ConnectionStringsGrid.DataBind();
    }
    
    </script>
    <html>
    
    <body>
    
    <form >
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    
  2. Speichern Sie die Datei unter dem Namen walkthrough.aspx, und zeigen Sie die Datei im Browser an.

    Sie sehen die entschlüsselten Werte aus der verschlüsselten Datei Web.config.

Exportieren und Importieren eines RSA-Schlüsselcontainers

Sie können einen RSA-Schlüsselcontainer als Sicherungskopie der Schlüsselwerte in eine XML-Datei exportieren oder den Schlüsselcontainer auf zusätzliche Webserver kopieren, die eine Kopie der Anwendung mit der verschlüsselten Datei Web.config hosten sollen. Ohne den spezifischen RSA-Schlüsselcontainer, mit dem die Datei Web.config verschlüsselt wurde, kann ASP.NET die verschlüsselten Konfigurationswerte nicht entschlüsseln.

So zeigen Sie die entschlüsselten Konfigurationswerte an

  1. Führen Sie an der Eingabeaufforderung aspnet_regiis.exe aus. Verwenden Sie dabei folgende Optionen:

    • Die -px-Option, gefolgt von "MyKeys", dem Namen des von Ihnen unter "Erstellen eines benutzerdefinierten RSA-Schlüsselcontainers" erstellten RSA-Schlüsselcontainers.

    • Den Pfad einer XML-Datei, in die der Schlüsselcontainer exportiert werden soll.

    • Die -pri-Option, um sicherzustellen, dass vertrauliche Schlüsseldaten exportiert werden. Andernfalls werden die exportierten Schlüsseldaten nur verschlüsselt, jedoch nicht entschlüsselt.

    Mit dem folgenden Befehl wird beispielsweise der RSA-Schlüsselcontainer auf Computerebene mit dem Namen "MyKeys" in die XML-Datei keys.xml im Stammverzeichnis von Laufwerk C exportiert.

    aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri

    Hinweis:

    Nachdem Sie den RSA-Schlüsselcontainer in eine XML-Datei exportiert haben, kopieren Sie die XML-Datei an einen Speicherort außerhalb des Webservers, und löschen Sie die Datei vom Webserver. Auf diese Weise stellen Sie sicher, dass die über den RSA-Schlüsselcontainer verschlüsselten Dateien Web.config entschlüsselt werden können.

    Sie verfügen jetzt über alle Informationen, die für das Kopieren der Anwendung auf einen separaten Webserver mithilfe der verschlüsselten Datei Web.config erforderlich sind.

  2. Wenn Sie die Anwendung mit der verschlüsselten Datei Web.config auf einen separaten Webserver kopieren möchten, fahren Sie mit Schritt 4 fort.

  3. Wenn Sie nicht über einen zweiten Webserver zum Kopieren der Webanwendung verfügen und mit dieser exemplarischen Vorgehensweise fortfahren möchten, führen Sie die folgenden Schritte zum Löschen des RSA-Schlüsselcontainers vom Webserver aus. Sie können den Webserver dann wie einen zweiten Webserver behandeln.

    1. Führen Sie zum Löschen des RSA-Containers an der Eingabeaufforderung aspnet_regiis.exe mit dem -pz-Schalter aus, gefolgt von "MyKeys".

      "MyKeys" wird z. B. mit dem folgenden Befehl gelöscht:

      aspnet_regiis -pz "MyKeys"

    2. Wechseln Sie zu Schritt 5.

  4. Kopieren Sie die Webanwendung einschließlich der verschlüsselten Web.config-Datei auf einen zweiten Webserver.

  5. Öffnen Sie auf dem zweiten Server ein Eingabeaufforderungsfenster, und ändern Sie das Verzeichnis mit dem folgenden Befehl in das Verzeichnis von .NET Framework, Version 2.0:

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  6. Kopieren Sie die XML-Datei, die den exportierten RSA-Schlüsselcontainer enthält, in das Verzeichnis von .NET Framework, Version 2.0, auf dem zweiten Webserver.

    In dieser exemplarischen Vorgehensweise wird die Datei keys.xml in das Stammverzeichnis von Laufwerk C kopiert.

  7. Führen Sie auf dem zweiten Webserver an der Eingabeaufforderung aspnet_regiis.exe aus. Verwenden Sie dabei folgende Optionen:

    • Die -pi-Option, gefolgt von "MyKeys" (dem Namen des exportierten Schlüsselcontainers), um den RSA-Schlüsselcontainer zu importieren.

    • Den Pfad der XML-Datei, die den exportierten Schlüsselcontainer enthält.

    Zum Beispiel wird mit dem folgenden Befehl der RSA-Schlüsselcontainer mit dem Namen "MyKeys" importiert.

    aspnet_regiis -pi "MyKeys" "c:\keys.xml"

  8. Löschen Sie auf dem zweiten Webserver die Kopie der XML-Datei mit dem exportierten RSA-Schlüsselcontainer.

  9. Bestimmen Sie auf dem zweiten Webserver die Identität der ASP.NET-Anwendung, und gewähren Sie dieser Identität Zugriff auf den importierten RSA-Schlüsselcontainer. Führen Sie dazu die Schritte unter "Gewähren von Lesezugriff auf einen RSA-Verschlüsselungsschlüssel" in dieser exemplarischen Vorgehensweise aus.

  10. Zeigen Sie auf dem zweiten Webserver die entschlüsselten Konfigurationseinstellungen der verschlüsselten Datei Web.config an, indem Sie die Schritte aus dem vorherigen Abschnitt ausführen.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration

Weitere Ressourcen

Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration