Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im SecurityLockdown-Beispiel wird veranschaulicht, wie Sie mehrere sicherheitsbezogene Features eines Windows Communication Foundation (WCF)-Diensts steuern können:
Verschlüsseln vertraulicher Informationen in der Konfigurationsdatei eines Diensts.
Sperren von Elementen in der Konfigurationsdatei, sodass geschachtelte Dienstunterverzeichnisse einstellungen nicht außer Kraft setzen können.
Die Steuerung der Protokollierung von personenbezogenen Informationen (PII) in Ablaufverfolgungs- und Nachrichtenprotokollen.
Diskussion
Jede dieser Features kann separat oder zusammen verwendet werden, um Aspekte der Sicherheit eines Diensts zu steuern. Dies ist kein endgültiger Leitfaden zum Sichern eines WCF-Diensts.
Die .NET Framework-Konfigurationsdateien können vertrauliche Informationen wie Verbindungszeichenfolgen zum Herstellen einer Verbindung mit Datenbanken enthalten. In freigegebenen, vom Web gehosteten Szenarien kann es wünschenswert sein, diese Informationen in der Konfigurationsdatei für einen Dienst zu verschlüsseln, sodass die in der Konfigurationsdatei enthaltenen Daten resistent gegen eine ungezwungene Anzeige sind. .NET Framework 2.0 und höher verfügt über die Möglichkeit, Teile der Konfigurationsdatei mithilfe der Windows Data Protection-Anwendungsprogrammierschnittstelle (DPAPI) oder des RSA-Kryptografieanbieters zu verschlüsseln. Die aspnet_regiis.exe kann mithilfe der DPAPI oder RSA ausgewählte Teile einer Konfigurationsdatei verschlüsseln.
In webgehosteten Szenarien ist es möglich, Dienste in Unterverzeichnissen anderer Dienste zu haben. Die Standardsemantik zum Bestimmen von Konfigurationswerten ermöglicht es Konfigurationsdateien in den geschachtelten Verzeichnissen, die Konfigurationswerte im übergeordneten Verzeichnis außer Kraft zu setzen. In bestimmten Situationen kann dies aus verschiedenen Gründen nicht erwünscht sein. Die WCF-Dienstkonfiguration unterstützt das Sperren von Konfigurationswerten, sodass geschachtelte Konfigurationen Ausnahmen erzeugen, wenn ein geschachtelter Dienst mit überschriebenen Konfigurationswerten ausgeführt wird.
In diesem Beispiel wird veranschaulicht, wie die Protokollierung bekannter personenbezogener Informationen (Personally Identifiable Information, PII) in Ablaufverfolgungs- und Nachrichtenprotokollen wie Benutzername und Kennwort gesteuert wird. Standardmäßig ist die Protokollierung bekannter PII deaktiviert, aber in bestimmten Situationen kann die Protokollierung von PII beim Debuggen einer Anwendung wichtig sein. Dieses Beispiel basiert auf den Ersten Schritten. In diesem Beispiel werden außerdem Ablaufverfolgungs- und Nachrichtenprotokollierung verwendet. Weitere Informationen finden Sie im Beispiel zur Ablaufverfolgung und Nachrichtenprotokollierung .
Verschlüsseln von Konfigurationsdateielementen
Für Sicherheitszwecke in einer freigegebenen Webhostingumgebung kann es wünschenswert sein, bestimmte Konfigurationselemente zu verschlüsseln, z. B. Datenbankverbindungszeichenfolgen, die vertrauliche Informationen enthalten können. Ein Konfigurationselement kann mit dem aspnet_regiis.exe Tool verschlüsselt werden, das sich im Ordner .NET Framework befindet, z. B. %WINDIR%\Microsoft.NET\Framework\v4.0.20728.
So verschlüsseln Sie die Werte im Abschnitt "appSettings" in Web.config für das Beispiel
Öffnen Sie eine Eingabeaufforderung über „Start->Ausführen“. Geben Sie im Feld
cmdden Text ein und klicken Sie auf OK.Navigieren Sie zum aktuellen .NET Framework-Verzeichnis, indem Sie den folgenden Befehl ausgeben:
cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728Verschlüsseln Sie die AppSettings-Konfigurationseinstellungen im Ordner Web.config, indem Sie den folgenden Befehl ausgeben:
aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider"
Weitere Informationen zum Verschlüsseln von Abschnitten von Konfigurationsdateien finden Sie in einer Anleitung zur DPAPI-Nutzung in der ASP.NET-Konfiguration (Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication) und in einer Anleitung, wie Sie Konfigurationsabschnitte in ASP.NET 2.0 unter Nutzung von RSA verschlüsseln (How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA).
Sperren von Konfigurationsdateielementen
In webgehosteten Szenarien ist es möglich, Dienste in Unterverzeichnissen von Diensten zu haben. In diesen Situationen werden die Konfigurationswerte für den Dienst im Unterverzeichnis berechnet durch die Überprüfung von Werten in "Machine.config", darauf folgendes Zusammenfügen mit Web.config-Dateien in übergeordneten Verzeichnissen im Verzeichnisbaum nach unten gehend sowie durch das Zusammenfügen der Web.config-Datei im Verzeichnis, das den Dienst enthält. Das Standardverhalten für die meisten Konfigurationselemente besteht darin, Konfigurationsdateien in Unterverzeichnissen das Außerkraftsetzen der in übergeordneten Verzeichnissen festgelegten Werte zu ermöglichen. In bestimmten Situationen kann es wünschenswert sein, zu verhindern, dass Konfigurationsdateien in Unterverzeichnissen die in der übergeordneten Verzeichniskonfiguration festgelegten Werte überschreiben.
.NET Framework bietet eine Möglichkeit zum Sperren von Konfigurationsdateielementen, sodass Konfigurationen, die gesperrte Konfigurationselemente außer Kraft setzen, Laufzeitausnahmen auslösen.
Ein Konfigurationselement kann gesperrt werden, indem das lockItem Attribut für einen Knoten in der Konfigurationsdatei angegeben wird, z. B. um den CalculatorServiceBehavior-Knoten in der Konfigurationsdatei zu sperren, damit Rechnerdienste in geschachtelten Konfigurationsdateien das Verhalten nicht ändern können, die folgende Konfiguration kann verwendet werden.
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior" lockItem="true">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Das Sperren von Konfigurationselementen kann spezifischer sein. Eine Liste von Elementen kann als Wert für das lockElements Sperren einer Gruppe von Elementen innerhalb einer Auflistung von Unterelementen angegeben werden. Eine Liste von Attributen kann als Wert für das lockAttributes Sperren einer Gruppe von Attributen innerhalb eines Elements angegeben werden. Eine vollständige Auflistung von Elementen oder Attributen kann mit Ausnahme einer angegebenen Liste gesperrt werden, indem sie die lockAllElementsExceptlockAllAttributesExcept Attribute eines Knotens angeben.
Konfiguration von PII-Protokollierung
Die Protokollierung von PII wird durch zwei Schalter gesteuert: eine computerweite Einstellung in Machine.config, die es einem Computeradministrator ermöglicht, die Protokollierung von PII und einer Anwendungseinstellung zuzulassen oder zu verweigern, mit der ein Anwendungsadministrator die Protokollierung von PII für jede Quelle in einer Web.config- oder App.config-Datei umschalten kann.
Die computerweite Einstellung wird durch Einstellen von enableLoggingKnownPii auf true oder false im machineSettings-Element in Machine.configgesteuert. Zum Beispiel kann mit den folgenden Einstellungen die Protokollierung von PII durch Anwendungen aktiviert werden.
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true" />
</system.serviceModel>
</configuration>
Hinweis
Die datei Machine.config hat einen Standardspeicherort: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.
Wenn das enableLoggingKnownPii Attribut in Machine.confignicht vorhanden ist, ist die Protokollierung von PII nicht zulässig.
Das Aktivieren der Protokollierung von PII für eine Anwendung erfolgt durch das Festlegen des Attributs logKnownPii des Ursprungselements auf true oder false in der Web.config- oder App.config-Datei. Die Protokollierung von PII sowohl für Nachrichten- als auch für Ablaufverfolgungsprotokollierung wird beispielsweise folgendermaßen aktiviert.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging" logKnownPii="true">
<listeners>
...
</listeners>
</source>
<source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
<listeners>
...
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Wenn das logKnownPii Attribut nicht angegeben ist, wird keine PII protokolliert.
PII wird nur protokolliert, wenn sowohl enableLoggingKnownPii auf true als auch logKnownPii auf true festgelegt ist.
Hinweis
System.Diagnostics ignoriert alle Attribute aller Quellen, mit Ausnahme der ersten, die in der Konfigurationsdatei aufgeführt ist. Das Hinzufügen des logKnownPii Attributs zur zweiten Quelle in der Konfigurationsdatei hat keine Auswirkung.
Von Bedeutung
Zum Ausführen dieses Beispiels müssen Sie Machine.configmanuell ändern. Seien Sie vorsichtig beim Ändern von Machine.config, da falsche Werte oder eine falsche Syntax verhindern können, dass alle .NET Framework-Anwendungen ausgeführt werden.
Es ist auch möglich, Konfigurationsdateielemente mithilfe von DPAPI und RSA zu verschlüsseln. Weitere Informationen finden Sie unter den folgenden Links:
Entwicklung sicherer ASP.NET-Anwendungen: Authentifizierung, Autorisierung und sichere Kommunikation
Vorgehensweise: Verschlüsseln von Konfigurationsabschnitten in ASP.NET 2.0 mithilfe von RSA
So richten Sie das Beispiel ein, erstellen es und führen es aus
Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.
Bearbeiten Sie Machine.config, um das Attribut
enableLoggingKnownPiiauftruefestzulegen, und fügen Sie ggf. die übergeordneten Knoten hinzu.Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.
Wenn Sie das Beispiel in einer Konfiguration mit einem oder mehreren Computern ausführen möchten, befolgen Sie die Anweisungen unter Ausführen der Windows Communication Foundation-Beispiele.
So bereinigen Sie das Beispiel
- Bearbeiten Sie Machine.config, um das
enableLoggingKnownPiiAttribut auffalsezu setzen.