Importieren und Exportieren von RSA-Schlüsselcontainern mit geschützter Konfiguration

Aktualisiert: November 2007

Die geschützte Konfiguration ermöglicht bei Verwendung von RsaProtectedConfigurationProvider das Erstellen, Löschen, Importieren und Exportieren von RSA-Schlüsselcontainern. Sinnvoll ist dies z. B. für eine Webfarm, bei der dieselbe verschlüsselte Datei Web.config auf mehreren Servern bereitgestellt wird. In diesem Fall muss derselbe RSA-Schlüsselcontainer auch auf den betreffenden Servern bereitgestellt werden. Zu diesem Zweck würden Sie einen RSA-Schlüsselcontainer für die Anwendung erstellen, diesen in eine XML-Datei exportieren und dann auf alle Servern importieren, die die verschlüsselte Datei Web.config entschlüsseln müssen.

Das Erstellen von RSA-Schlüsselcontainern kann sich auch bei einem einzelnen Webserver als nützlich erweisen, wenn dieser mehrere ASP.NET-Anwendungen hostet. Durch das Erstellen eines RSA-Schlüsselcontainers für jede Anwendung oder für jede Anwendungsgruppe eines Kunden können Sie die Sicherheit der vertraulichen Konfigurationsinformationen der Anwendung verbessern. Sie stellen nämlich dadurch sicher, dass die Datei Web.config für eine Anwendung nicht mit dem RSA-Schlüsselcontainer einer anderen Anwendung entschlüsselt werden kann.

Erstellen eines RSA-Schlüsselcontainers

Um einen RSA-Schlüsselcontainer zu erstellen, verwenden Sie das ASP.NET IIS-Registrierungstool (Aspnet_regiis.exe) mit dem –pc-Schalter. Sie müssen dem Schlüsselcontainer einen Namen geben, mit dem dieser Schlüsselcontainer dann im configProtectedData-Abschnitt der Datei Web.config der Anwendung als der Schlüsselcontainer festgelegt wird, der von RsaProtectedConfigurationProvider verwendet wird. Sie müssen die -exp-Option verwenden, um sicherzustellen, dass der neu erstellte RSA-Schlüsselcontainer exportiert werden kann.

Mit dem folgenden Befehl wird z. B. ein exportierbarer RSA-Schlüsselcontainer auf Computerebene mit dem Namen SampleKeys erstellt.

aspnet_regiis -pc "SampleKeys"–exp

Das folgende Beispiel zeigt den configProtectedData-Abschnitt der Datei Web.config. Der Abschnitt gibt einen RsaProtectedConfigurationProvider an, der einen RSA-Schlüsselcontainer auf Computerebene mit dem Namen SampleKeys verwendet.

<configProtectedData>
   <providers>
      <add name="SampleProvider" 
           type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
                 Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                 processorArchitecture=MSIL"
           keyContainerName="SampleKeys" 
           useMachineContainer="true" />
   </providers>
</configProtectedData>
Hinweis:

Um Verschlüsselungs- und Entschlüsselungsschlüssel für geschützte Konfigurationsabschnitte nicht unbeabsichtigt zu löschen, werden RSA-Schlüsselcontainer bei der Deinstallation von .NET-Framework nicht gelöscht.

Gewähren von Zugriff auf RSA-Schlüsselcontainer

RSA-Schlüsselcontainer werden standardmäßig durch NTFS-Zugriffssteuerungslisten (ACLs) auf dem Server gut geschützt, auf dem sie installiert sind. Dies verbessert die Sicherheit der verschlüsselten Daten, indem beschränkt wird, wer auf den Verschlüsselungsschlüssel zugreifen kann.

Bevor ASP.NET einen RSA-Schlüsselcontainer verwenden kann, muss die Prozessidentität der ASP.NET-Anwendung für Lesezugriff auf diesen RSA-Schlüsselcontainer autorisiert werden. Informationen über das Festlegen und das Bestimmen der Identität einer ASP.NET-Anwendung finden Sie unter Identitätswechsel in ASP.NET.

Verwenden Sie das Tool Aspnet_regiis.exe mit dem -pa-Schalter, um der Identität der ASP.NET-Anwendung Lesezugriff auf einen RSA-Schlüsselcontainer zu gewähren. Mit dem folgenden Befehl wird beispielsweise dem NETZWERKDIENST-Konto unter Windows Server 2003 Lesezugriff auf den RSA-Schlüsselcontainer auf Computerebene mit dem Namen SampleKeys gewährt.

aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
Hinweis:

Wenn es sich bei dem RSA-Schlüsselcontainer um einen Container auf Benutzerebene handelt, müssen Sie als der Benutzer angemeldet sein, in dessen Windows-Profil der Schlüssel gespeichert ist. Außerdem müssen Sie die -pku-Option verwenden, um Zugriff auf den RSA-Schlüsselcontainer auf Benutzerebene zu gewähren. Weitere Informationen hierzu finden Sie unter RSA-Schlüsselcontainer auf Computerebene und Benutzerebene.

Um den in der Computerkonfiguration angegebenen standardmäßigen RsaProtectedConfigurationProvider zu verwenden, müssen Sie zuerst der Windows-Identität der Anwendung Zugriff auf den Schlüsselcontainer auf Computerebene mit dem Namen NetFrameworkConfigurationKey gewähren. Dies ist der Schlüsselcontainer, der für den Standardanbieter angegeben ist. Mit dem folgenden Befehl wird beispielsweise dem NETZWERKDIENST-Konto Zugriff auf den RSA-Schlüsselcontainer gewährt, der vom standardmäßigen RsaProtectedConfigurationProvider verwendet wird:

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

Der NetFrameworkConfigurationKey-RSA-Schlüsselcontainer ist der Standardschlüsselcontainer für die vom Tool Aspnet_regiis.exe ausgegebenen Befehle. Der vorherige Befehl könnte deshalb auch wie folgt ausgegeben werden:

aspnet_regiis -pa "NT AUTHORITY\NETWORK SERVICE"

Exportieren von RSA-Schlüsselcontainern

Um einen RSA-Schlüsselcontainer in eine XML-Datei zu exportieren, können Sie das Tool Aspnet_regiis.exe mit dem –px-Schalter verwenden. Die XML-Datei kann als Sicherungskopie des RSA-Schlüsselcontainers oder zum Importieren des RSA-Schlüsselcontainers auf einen anderen Server verwendet werden. Der private Teil des Schlüssels des RSA-Schlüsselcontainers wird benötigt, um verschlüsselte Informationen zu entschlüsseln. Um den exportierten Schlüsselcontainer auf einem anderen Server zu verwenden, müssen Sie auch den privaten Schlüssel importieren. Sie können den privaten Schlüssel in die XML-Datei einfügen, indem Sie beim Exportieren des Schlüssels die –pri-Option angeben. Sie müssen außerdem angeben, ob es sich bei dem exportierten Schlüsselcontainer um einen auf Computerebene oder auf Benutzerebene handelt. Um einen Schlüsselcontainer auf Benutzerebene exportieren zu können, müssen Sie als der Benutzer angemeldet sein, in dessen Windows-Profil der Schlüsselcontainer gespeichert ist. Um einen Schlüsselcontainer auf Benutzerebene anzugeben, fügen Sie beim Exportieren der Verschlüsselungsschlüsseldaten die -pku-Option ein. Ansonsten wird der Schlüsselcontainer auf Computerebene exportiert. Weitere Informationen über Verschlüsselungsschlüssel auf Computerebene und auf Benutzerebene finden Sie unter RSA-Schlüsselcontainer auf Computerebene und Benutzerebene.

Mit dem folgenden Befehl wird beispielsweise der RSA-Schlüsselcontainer auf Computerebene mit dem Namen SampleKeys in die XML-Datei keys.xml einschließlich der privaten Schlüsseldaten exportiert.

aspnet_regiis -px "SampleKeys" keys.xml -pri
Hinweis:

Nachdem Sie einen RSA-Schlüsselcontainer in eine XML-Datei exportiert haben, kopieren Sie die XML-Datei aus Sicherheitsgründen an einen Speicherort außerhalb des Webservers, und löschen Sie die XML-Datei vom Server. Hierdurch wird die Wahrscheinlichkeit verringert, dass ein Angreifer Zugriff auf den RSA-Schlüsselcontainer erlangt und Dateien Web.config entschlüsseln kann, die mit diesem RSA-Container verschlüsselt wurden.

Importieren eines RSA-Schlüsselcontainers

Zum Importieren eines RSA-Schlüsselcontainers aus einer XML-Datei können Sie das Tool Aspnet_regiis.exe mit dem –pi-Schalter verwenden. Sie müssen außerdem angeben, ob es sich bei dem importierten Schlüsselcontainer um einen Schlüsselcontainer auf Computerebene oder auf Benutzerebene handelt. Um einen Schlüsselcontainer auf Benutzerebene importieren zu können, müssen Sie als der Benutzer angemeldet sein, in dessen Windows-Profil der Schlüsselcontainer gespeichert werden soll. Um einen Schlüssel auf Benutzerebene anzugeben, fügen Sie beim Importieren der Verschlüsselungsschlüsseldaten die -pku-Option ein. Ansonsten wird der exportierte Schlüssel in den Schlüsselcontainer auf Computerebene importiert.

Mit dem folgenden Befehl wird z. B. ein RSA-Schlüsselcontainer auf Computerebene mit dem Namen SampleKeys aus der Datei keys.xml importiert:

aspnet_regiis -pi "SampleKeys" keys.xml

Der Identität der ASP.NET-Anwendung, die den importierten RSA-Schlüsselcontainer verwendet, muss Lesezugriff auf den Inhalt des RSA-Schlüsselcontainers gewährt werden. Weitere Informationen finden Sie unter Gewähren von Zugriff auf RSA-Schlüsselcontainer weiter oben in diesem Thema.

Löschen von RSA-Schlüsselcontainern

Um einen RSA-Schlüsselcontainer zu löschen, können Sie das Tool Aspnet_regiis.exe mit dem –pz-Schalter verwenden. Vor dem Löschen eines RSA-Schlüsselcontainers sollten Sie sicherstellen, dass Sie den Schlüssel in eine XML-Datei für einen späteren Import exportiert haben oder dass es keine mit dem RSA-Schlüsselcontainer verschlüsselten Daten gibt, die später einmal wieder entschlüsselt werden müssen.

Wenn Sie einen RSA-Schlüsselcontainer löschen, müssen Sie dessen Namen angeben und angeben, ob es sich um einen RSA-Schlüsselcontainer auf Computerebene oder auf Benutzerebene handelt. Um einen Schlüsselcontainer auf Benutzerebene zu löschen, müssen Sie als der Benutzer angemeldet sein, in dessen Windows-Profil der Schlüssel gespeichert ist.

Zum Beispiel löscht der folgende Befehl den RSA-Schlüsselcontainer auf Computerebene mit dem Namen SampleKeys.

aspnet_regiis -pz "SampleKeys"

Siehe auch

Aufgaben

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

Weitere Ressourcen

Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration