Freigeben über


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

Aktualisiert: November 2007

Erläutert anhand eines Beispiels Schritt für Schritt, wie Sie Abschnitte der Konfigurationsdatei einer ASP.NET-Anwendung verschlüsseln können.

Mit der geschützten Konfiguration können Sie vertrauliche Informationen aus der Datei Web.config verschlüsseln und damit die Sicherheit einer Anwendung erhöhen. Sie können aspnet_regiis.exe verwenden, um Abschnitte der Datei Web.config zu verschlüsseln und Verschlüsselungsschlüssel zu verwalten. ASP.NET entschlüsselt die Konfigurationsdatei bei der Verarbeitung automatisch. Deshalb ist für die Entschlüsselung kein zusätzlicher Code erforderlich. Weitere Informationen über die geschützte Konfiguration finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.

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

  • Verschlüsseln von Abschnitten der Datei Web.config mithilfe des Standardanbieters für geschützte Konfiguration.

  • Zugreifen auf entschlüsselte Konfigurationsinformationen in einer ASP.NET-Seite.

Vorbereitungsmaßnahmen

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

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. Diese exemplarische Vorgehensweise verwendet den standardmäßigen RsaProtectedConfigurationProvider-Anbieter, der in der Datei Machine.config angegeben ist und den Namen "RsaProtectedConfigurationProvider" trägt. Der RSA-Schlüsselcontainer, der vom standardmäßigen RsaProtectedConfigurationProvider-Anbieter verwendet wird, trägt den Namen "NetFrameworkConfigurationKey".

So gewähren Sie der ASP.NET-Identität Lesezugriff auf den Standard-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 keinen Identitätswechsel zur Authentifizierung der Site, da in dieser exemplarischen Vorgehensweise IIS zum Einsatz kommt. Verwenden Sie in dieser exemplarischen Vorgehensweise stattdessen nur die anonyme Authentifizierung als Identität der ASP.NET-Anwendung. Wenn die Identität der Anwendung der Benutzer-ID entspricht, mit der Sie gerade angemeldet sind, z. B. DOMAIN\myuserid, deaktivieren Sie den Identitätswechsel in der Datei Web.config der Anwendung. Zum Deaktivieren des Identitätswechsels öffnen Sie die Datei Web.config, und entfernen Sie das <identity>-Element. Nachdem Sie das <identity>-Element entfernt haben, aktualisieren Sie die Anzeige von identity.aspx im Browser. Die geänderte Identität der Anwendung wird angezeigt.

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

    • Die -pa-Option, gefolgt vom Namen des RSA-Schlüsselcontainers für den Standard-RsaProtectedConfigurationProvider.

    • 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 "NetFrameworkConfigurationKey" auf Computerebene.

    Hinweis:

    Auf einem Computer, auf dem Microsoft Windows Server 2003 mit Identitätswechsel für eine ASP.NET-Anwendung, der in der Datei Web.config deaktiviert ist, ausgeführt wird, ist die Identität der Anwendung die Identität des Anwendungspools. Standardmäßig ist dies das Konto NETWORK SERVICE (unter früheren Versionen von Windows ist die Identität das lokale ASPNET-Konto).

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

    Schließen Sie das Eingabeaufforderungsfenster nicht.

Verschlüsseln von Abschnitten der Datei Web.config

Da die Identität der ASP.NET-Anwendung nun über Lesezugriff auf den RSA-Schlüsselcontainer für das standardmäßige RsaProtectedConfigurationProvider-Objekt verfügt, können Sie die Abschnitte der Datei Web.config für die ASP.NET-Anwendung mithilfe dieses Schlüsselcontainers verschlüsseln. ASP.NET entschlüsselt die Abschnitte bei der Verarbeitung der Datei Web.config.

So verschlüsseln Sie die Abschnitte <connectionStrings> und <machineKey> der Datei Web.config

  1. Öffnen Sie die Datei Web.config der 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 diese Datei unter dem Namen web.config im Verzeichnis der ASP.NET-Anwendung.
  2. Stellen Sie sicher, dass für das <system.web>-Element sowohl ein untergeordnetes <connectionStrings>-Element als auch ein untergeordnetes <machineKey>-Element vorhanden ist, wie im folgenden Beispiel gezeigt.

    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    
       <system.web>
    
         <machineKey validationKey="D61B3C89CB33A2F1422FF158AFF7320E8DB8CB5CDA1742572A487D94018787EF42682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
           decryptionKey="FBF50941F22D6A3B229EA593F24C41203DA6837F1122EF17" />
    
       </system.web>
    </configuration>
    
  3. Schließen Sie die Datei Web.config.

  4. 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.*

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

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

    • Die -app-Option und den Namen der Anwendung.

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

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

  6. Wiederholen Sie den vorigen Schritt für das untergeordnete <machineKey>-Element des <system.web>-Elements, wie im folgenden Beispiel gezeigt.

    aspnet_regiis -pe "system.web/machineKey" -app "/MyApplication"

    Schließen Sie das Eingabeaufforderungsfenster nicht.

  7. Ö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>
    
       <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
          <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>
    
       <system.web>
         <machineKey configProtectionProvider="RsaProtectedConfigurationProvider">
           <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>IwUopItbWX0mJdGWtAqE1LlsG3u5RBRlAXs9/GZj3HEfeUXduHVF76q6Ip88YqlfLthH+DMBYdOZAF+hCOmS2agfTo1tKUvELRGIljS/BqEYxUO+/IOz9tllAw8ZlGF7AVCzptgIejI+iLXEZfMKW7f6EMGeb5vaaKXHIkYZwcM=
                   </CipherValue>
                 </CipherData>
               </EncryptedKey>
             </KeyInfo>
             <CipherData>
               <CipherValue>ivVyERVPNUzIb/i7/NUbRkxsxh8IG959vycwrzJO0vYWxHZ5i03SfrLbsGUV17+FxZ6lbcrVaF5FY3zVm7dRMRvQpVFwaVcL
               </CipherValue>
             </CipherData>
           </EncryptedData>
         </machineKey>
    
       </system.web>
    </configuration>
    
  8. 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" %>
    <%@ Import Namespace="System.Web.Configuration" %>
    <script >
    
    Public Sub Page_Load()
    
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings
      ConnectionStringsGrid.DataBind()
    
      Dim config As System.Configuration.Configuration = _
        WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)
      Dim key As MachineKeySection = _
        CType(config.GetSection("system.web/machineKey"), MachineKeySection)
      DecryptionKey.Text = key.DecryptionKey
      ValidationKey.Text = key.ValidationKey
    
    End Sub
    
    </script>
    <html>
    
    <body>
    
    <form >
    
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
      <P>
      MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR>
      MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" />
    
    </form>
    
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Web.Configuration" %>
    <script >
    
    public void Page_Load()
    {
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings;
      ConnectionStringsGrid.DataBind();
    
      Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
      MachineKeySection key = 
        (MachineKeySection)config.GetSection("system.web/machineKey");
      DecryptionKey.Text = key.DecryptionKey;
      ValidationKey.Text = key.ValidationKey;
    }
    
    </script>
    <html>
    
    <body>
    
    <form >
    
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
      <P>
      MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR>
      MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" />
    
    </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.

  3. Löschen Sie zur Geheimhaltung der vertraulichen Daten Ihrer Website die Datei walkthrough.aspx nach Abschluss dieser exemplarischen Vorgehensweise.

Nächste Schritte

Sie können den Inhalt der verschlüsselten Datei Web.config entschlüsseln, indem Sie aspnet_regiis.exe mit der -pd-Option ausführen. Die Syntax gleicht der Syntax zum Verschlüsseln von Inhalten der Datei Web.config mit der -pe-Option, jedoch müssen Sie keinen geschützten Konfigurationsanbieter angeben. Der entsprechende Anbieter wird mithilfe des configProtectionProvider-Elements für den protected-Abschnitt identifiziert. Beispielsweise werden durch die folgenden Befehle das <connectionStrings>-Element und das untergeordnete <machineKey>-Element des <system.web>-Elements in der Datei Web.config der ASP.NET-Anwendung MyApplication entschlüsselt.

aspnet_regiis -pd "connectionStrings" -app "/MyApplication"

aspnet_regiis -pd "system.web/machineKey" -app "/MyApplication"

Siehe auch

Aufgaben

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

Weitere Ressourcen

Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration