Sperre der PII-SicherheitPII Security Lockdown

In diesem Beispiel wird veranschaulicht, wie mehrere sicherheitsbezogene Funktionen eines Windows Communication Foundation (WCF)-Diensts durch steuern:This sample demonstrates how to control several security-related features of a Windows Communication Foundation (WCF) service by:

  • Das Verschlüsseln von vertraulichen Informationen in der Konfigurationsdatei eines Diensts.Encrypting sensitive information in a service's configuration file.

  • Das Sperren von Elementen in der Konfigurationsdatei, sodass geschachtelte Dienstunterverzeichnisse keine Einstellungen überschreiben können.Locking elements in the configuration file so that nested service subdirectories cannot override settings.

  • Die Steuerung der Protokollierung von personenbezogenen Informationen (PII) in Ablaufverfolgungs- und Nachrichtenprotokollen.Controlling the logging of Personally Identifiable Information (PII) in trace and message logs.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your computer. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Management\SecurityLockdown

DiskussionDiscussion

Jede dieser Funktionen kann getrennt oder gemeinsam verwendet werden, um Aspekte einer Dienstsicherheit zu steuern.Each of these features can be used separately or together to control aspects of a service's security. Dies ist kein endgültiger Leitfaden zur Sicherung eines WCF-Diensts.This is not a definitive guide to securing a WCF service.

Die .NET Framework-Konfigurationsdateien können vertrauliche Informationen, wie beispielsweise Verbindungszeichenfolgen enthalten, um eine Verbindung mit Datenbanken herzustellen.The .NET Framework configuration files can contain sensitive information such as connection strings to connect to databases. In freigegebenen, im Internet 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 gegen zufälliges Einsehen geschützt sind.In shared, Web-hosted scenarios it may be desirable to encrypt this information in the configuration file for a service so that the data contained within the configuration file is resistant to casual viewing. .NET Framework 2.0 und höher kann Teile der Konfigurationsdatei mithilfe von Windows-DPAPI (Data Protection Application Programming Interface) oder dem RSA Cryptographic Provider verschlüsseln..NET Framework 2.0 and later has the ability to encrypt portions of the configuration file using the Windows Data Protection application programming interface (DPAPI) or the RSA Cryptographic provider. Die Datei "aspnet_regiis.exe" kann mit DPAPI oder RSA ausgewählte Teile einer Konfigurationsdatei verschlüsseln.The aspnet_regiis.exe using the DPAPI or RSA can encrypt select portions of a configuration file.

In im Internet gehosteten Szenarien ist es möglich, Dienste in Unterverzeichnissen anderer Dienste zu haben.In Web-hosted scenarios it is possible to have services in subdirectories of other services. Die Standardsemantik für die Bestimmung von Konfigurationswerten ermöglicht es Konfigurationsdateien in den geschachtelten Verzeichnissen, die Konfigurationswerte im übergeordneten Verzeichnis zu überschreiben.The default semantic for determining configuration values allows configuration files in the nested directories to override the configuration values in the parent directory. In bestimmten Situationen kann dies aus verschiedenen Gründen unerwünscht sein.In certain situations this may be undesirable for a variety of reasons. WCF-Konfiguration unterstützt das Sperren von Konfigurationswerten, sodass geschachtelte Konfiguration Ausnahmen erzeugt werden, wenn ein geschachtelter Dienst ausgeführt wird, mit überschriebenen Konfigurationswerten.WCF service configuration supports the locking of configuration values so that nested configuration generates exceptions when a nested service is run using overridden configuration values.

Dieses Beispiel veranschaulicht das Steuern der Protokollierung von bekannten personenbezogenen Informationen (PII, Personally Identifiable Information) in Ablaufverfolgungs- und Nachrichtenprotokollen, beispielsweise Benutzername und Kennwort.This sample demonstrates how to control the logging of known Personally Identifiable Information (PII) in trace and message logs, such as username and password. Standardmäßig ist die Protokollierung von bekannten PII deaktiviert. Allerdings kann in bestimmten Situationen die Protokollierung von PII beim Debuggen einer Anwendung wichtig sein.By default, logging of known PII is disabled however in certain situations logging of PII can be important in debugging an application. Dieses Beispiel basiert auf der Einstieg.This sample is based on the Getting Started. In diesem Beispiel werden außerdem Ablaufverfolgungs- und Nachrichtenprotokollierung verwendet.In addition, this sample uses tracing and message logging. Weitere Informationen finden Sie unter der Ablaufverfolgung und Nachrichtenprotokollierung Beispiel.For more information, see the Tracing and Message Logging sample.

Verschlüsseln von KonfigurationsdateielementenEncrypting Configuration File Elements

Aus Sicherheitsgründen kann es in einer freigegebenen Webhostingumgebung wünschenswert sein, bestimmte Konfigurationselemente zu verschlüsseln, wie beispielsweise Datenbankverbindungszeichenfolgen, die vertrauliche Informationen enthalten.For security purposes in a shared Web-hosting environment, it may be desirable to encrypt certain configuration elements, such as database connection strings that may contain sensitive information. Ein Konfigurationselement kann mit dem Tool aspnet_regiis.exe im .NET Framework-Ordner (z. B. %WINDIR%\Micrsoft.NET\Framework\v4.0.20728) verschlüsselt werden.A configuration element may be encrypted using the aspnet_regiis.exe tool found in the .NET Framework folder For example, %WINDIR%\Micrsoft.NET\Framework\v4.0.20728.

So verschlüsseln Sie die Werte im Abschnitt appSettings in Web.config für das BeispielTo encrypt the values in the appSettings section in Web.config for the sample

  1. Öffnen Sie eine Eingabeaufforderung über "Start->Ausführen".Open a command prompt by using Start->Run…. Geben Sie in cmd , und klicken Sie auf OK.Type in cmd and click OK.

  2. Navigieren Sie zum aktuellen .NET Framework-Verzeichnis, indem Sie folgenden Befehl ausgeben: cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728.Navigate to the current .NET Framework directory by issuing the following command: cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728.

  3. Verschlüsseln Sie die appSettings-Konfigurationseinstellungen im Web.config-Ordner, indem Sie folgenden Befehl ausgeben: aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider".Encrypt the appSettings configuration settings in the Web.config folder by issuing the following command: aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider".

Weitere Informationen zum Verschlüsseln von Konfigurationsdateiabschnitten verwendbaren durch Lesen einer Vorgehensweise auf DPAPI in der ASP.NET-Konfiguration (Building Secure ASP.NET Applications: Authentifizierung, Autorisierung und sichere Kommunikation) und eine exemplarische Vorgehensweise für RSA in der ASP.NET-Konfiguration (Vorgehensweise: Verschlüsseln von Konfigurationsabschnitten in ASP.NET 2.0 mithilfe von RSA).More information about encrypting sections of configuration files can be found by reading a how-to on DPAPI in ASP.NET configuration (Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication) and a how-to on RSA in ASP.NET configuration (How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA).

Sperren von KonfigurationsdateielementenLocking configuration file elements

In im Internet gehosteten Szenarien ist es möglich, Dienste in Unterverzeichnissen von Diensten zu haben.In Web-hosted scenarios, it is possible to have services in subdirectories of services. 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.In these situations, configuration values for the service in the subdirectory are calculated by examining values in Machine.config and successively merging with any Web.config files in parent directories moving down the directory tree and finally merging the Web.config file in the directory that contains the service. Das Standardverhalten der meisten Konfigurationselemente besteht darin, zu erlauben, dass Konfigurationsdateien in Unterverzeichnissen die in den übergeordneten Verzeichnissen gesetzten Werte überschreiben.The default behavior for most configuration elements is to allow configuration files in subdirectories to override the values set in parent directories. In bestimmten Situationen kann es erwünscht sein, dass die Konfigurationsdateien in den Unterverzeichnissen die in der Konfiguration des übergeordneten Verzeichnisses gesetzten Werte nicht überschreiben.In certain situations it may be desirable to prevent configuration files in subdirectories from overriding values set in parent directory configuration.

.NET Framework bietet eine Möglichkeit des Sperrens von Konfigurationsdateielementen, sodass Konfigurationen, die gesperrte Konfigurationselemente überschreiben, Laufzeitausnahmen auslösen.The .NET Framework provides a way to lock configuration file elements so that configurations that override locked configuration elements throw run-time exceptions.

Ein Konfigurationselement kann gesperrt werden, indem das lockItem-Attribut für einen Knoten in der Konfigurationsdatei festgelegt wird. Beispielsweise kann die folgende Konfiguration genutzt werden, um einen CalculatorServiceBehavior-Knoten zu sperren, sodass Rechnerdienste in geschachtelten Konfigurationsdateien das Verhalten nicht ändern können.A configuration element can be locked by specifying the lockItem attribute for a node in the configuration file, for example, to lock the CalculatorServiceBehavior node in the configuration file so that calculator services in nested configuration files cannot change the behavior, the following configuration can be used.

<configuration>  
   <system.serviceModel>  
      <behaviors>   
          <serviceBehaviors>   
             <behavior name="CalculatorServiceBehavior" lockItem="true">   
               <serviceMetadata httpGetEnabled="True"/>   
               <serviceDebug includeExceptionDetailInFaults="False" />   
             </behavior>   
          </serviceBehaviors>   
       </behaviors>   
    </system.serviceModel>  
</configuration>  

Konfigurationselemente können individuell gesperrt werden.Locking of configuration elements can be more specific. Als Wert für lockElements kann eine Liste von Elementen festgelegt werden, um nur bestimmte Elemente innerhalb einer Auflistung von Unterelementen zu sperren.A list of elements can be specified as the value to the lockElements to lock a set of elements within a collection of sub-elements. Eine Liste an Attributen kann als Wert für lockAttributes festgelegt werden, um eine Menge an Attributen innerhalb eines Elements zu sperren.A list of attributes can be specified as the value to the lockAttributes to lock a set of attributes within an element. Eine gesamte Auflistung an Elementen oder Attributen kann mit Ausnahme einer festgelegten Liste gesperrt werden, indem die Attribute lockAllElementsExcept oder lockAllAttributesExcept auf einem Knoten festgelegt werden.An entire collection of elements or attributes can be locked except for a specified list by specifying the lockAllElementsExcept or lockAllAttributesExcept attributes on a node.

Konfiguration von PII-ProtokollierungPII Logging Configuration

Die Protokollierung von PII wird über zwei Schalter gesteuert: eine computerweite Einstellung in Machine.config, die es einem Computeradministrator ermöglicht, die Protokollierung von PII zu erlauben oder zu verweigern, und eine Anwendungseinstellung, die es einem Anwendungsadministrator ermöglicht, die Protokollierung von PII für jede Quelle in einer Web.config- oder App.config-Datei ein- bzw. auszuschalten.Logging of PII is controlled by two switches: a computer-wide setting found in Machine.config that allows a computer administrator to permit or deny logging of PII and an application setting that allows an application administrator to toggle logging of PII for each source in a Web.config or App.config file.

Die computerweite Einstellung wird in Machine.config im Abschnitt enableLoggingKnownPii mithilfe von true gesteuert, indem dieser Wert auf false oder machineSettings festgelegt wird. Dass Anwendungen die Protokollierung von PII aktivieren wird beispielsweise folgendermaßen ermöglicht.The computer-wide setting is controlled by setting enableLoggingKnownPii to true or false, in the machineSettings element in Machine.config. For example, the following allows applications to turn on logging of PII.

<configuration>  
    <system.serviceModel>  
        <machineSettings enableLoggingKnownPii="true" />  
    </system.serviceModel>  
</configuration>  

Hinweis

Die Machine.config-Datei hat einen Standardspeicherort: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.The Machine.config file has a default location: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.

Ist das enableLoggingKnownPii-Attribut nicht in "Machine.config" vorhanden, ist die Protokollierung von PII nicht zugelassen.If the enableLoggingKnownPii attribute is not present in Machine.config, logging of PII is not allowed.

Die Aktivierung der Protokollierung von PII für eine Anwendung wird erreicht, indem man das logKnownPii-Attribut des Quellelements in der Web.config- oder App.config-Datei auf true oder false festlegt.Enabling logging of PII for an application is done by setting the logKnownPii attribute of the source element to true or false in the Web.config or App.config file. Die Protokollierung von PII sowohl für Nachrichten- als auch für Ablaufverfolgungsprotokollierung wird beispielsweise folgendermaßen aktiviert.For example, the following enables logging of PII for both message logging and trace logging.

<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 festgelegt ist, wird PII nicht protokolliert.If the logKnownPii attribute is not specified, then PII is not logged.

PII wird nur protokolliert, wenn sowohl enableLoggingKnownPii auf true und logKnownPii auf true festgelegt ist.PII is only logged if both enableLoggingKnownPii is set to true, and logKnownPii is set to true.

Hinweis

System.Diagnostics ignoriert alle Attribute auf allen Quellen, ausgenommen der zuerst in der Konfigurationsdatei aufgelisteten.System.Diagnostics ignores all attributes on all sources except the first one listed in the configuration file. Das Hinzufügen des logKnownPii-Attributs zur zweiten Quelle in der Konfigurationsdatei hat keine Auswirkungen.Adding the logKnownPii attribute to the second source in the configuration file has no effect.

Wichtig

Die Ausführung dieses Beispiels erfordert die manuelle Änderung von "Machine.config". Die Änderung von "Machine.config" sollte vorsichtig vorgenommen werden, da falsche Werte oder Syntax dazu führen können, dass die Ausführung aller .NET Framework-Anwendungen verhindert wird.To run this sample involves manual modification of Machine.config. Care should be taken when modifying Machine.config as incorrect values or syntax may prevent all .NET Framework applications from running.

Es ist auch möglich, Konfigurationsdateielemente mit DPAPI und RSA zu verschlüsseln.It is also possible to encrypt configuration file elements using DPAPI and RSA. Weitere Informationen finden Sie unter den folgenden Links:For more information, see the following links:

So richten Sie das Beispiel ein, erstellen es und führen es ausTo set up, build and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Bearbeiten Sie "Machine.config", um das enableLoggingKnownPii-Attribut auf true festzulegen, wobei Sie, falls notwendig, die übergeordneten Knoten hinzufügen.Edit Machine.config to set the enableLoggingKnownPii attribute to true, adding the parent nodes if necessary.

  3. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  4. Um das Beispiel in einer Einzelcomputer- oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-computer configuration, follow the instructions in Running the Windows Communication Foundation Samples.

So bereinigen Sie das BeispielTo clean up the sample

  1. Bearbeiten Sie Machine.config, und legen Sie enableLoggingKnownPii-Attribut auf false fest.Edit Machine.config to set the enableLoggingKnownPii attribute to false.

Siehe auchSee Also

Überwachen der AppFabric-BeispieleAppFabric Monitoring Samples