Vorgehensweise: Endpunkte im Unternehmen sperrenHow to: Lock Down Endpoints in the Enterprise

Von Großunternehmen wird oft gefordert, dass Anwendungen unter Einhaltung der Sicherheitsrichtlinien der Unternehmen entwickelt werden.Large enterprises often require that applications are developed in compliance with enterprise security policies. Im folgende Thema wird erläutert, wie zum Entwickeln und installieren eine clientendpunktbestätigung, die verwendet werden kann, überprüfen Sie alle Windows Communication Foundation (WCF)-Clientanwendungen, die auf Computern installiert wird.The following topic discusses how to develop and install a client endpoint validator that can be used to validate all Windows Communication Foundation (WCF) client applications installed on computers.

In diesem Fall wird das Validierungssteuerelement eine Clientbestätigung, da dieses Endpunktverhalten, an den Client hinzugefügt wird <CommonBehaviors > Abschnitt in der Datei "Machine.config".In this case, the validator is a client validator because this endpoint behavior is added to the client <commonBehaviors> section in the machine.config file. WCF lädt gemeinsames Endpunktverhalten nur für Clientanwendungen und gemeinsames Dienstverhalten nur für dienstanwendungen.WCF loads common endpoint behaviors only for client applications and loads common service behaviors only for service applications. Um diese Bestätigung für Dienstanwendungen installieren zu können, muss es sich bei der Bestätigung um ein Dienstverhalten handeln.To install this same validator for service applications, the validator must be a service behavior. Weitere Informationen finden Sie unter der <CommonBehaviors > Abschnitt.For more information, see the <commonBehaviors> section.

Wichtig

Dienst- oder Endpunktverhaltensweisen nicht gekennzeichnet werden, mit der AllowPartiallyTrustedCallersAttribute -Attribut (APTCA), die hinzugefügt werden, die <CommonBehaviors > Abschnitt einer Konfigurationsdatei werden nicht ausgeführt, wenn in einer teilweise vertrauenswürdigen Anwendung ausgeführt wird Umgebung und keine Ausnahme wird ausgelöst, wenn in diesem Fall.Service or endpoint behaviors not marked with the AllowPartiallyTrustedCallersAttribute attribute (APTCA) that are added to the <commonBehaviors> section of a configuration file are not run when the application runs in a partial trust environment, and no exception is thrown when this occurs. Um die Ausführung gemeinsamer Verhalten, wie z. B. Bestätigungen, zu erzwingen, müssen Sie einen der beiden folgenden Schritte ausführen:To enforce the running of common behaviors such as validators, you must either:

– Markieren Sie das gemeinsame Verhalten mit dem AllowPartiallyTrustedCallersAttribute-Attribut, damit es ausgeführt werden kann, wenn es als teilweise vertrauenswürdige Anwendung bereitgestellt wird.-- Mark your common behavior with the AllowPartiallyTrustedCallersAttribute attribute so that it can run when deployed as a Partial Trust application. Beachten Sie, dass auf dem Computer ein Registrierungseintrag festgelegt werden kann, um die Ausführung von mit APTCA markierten Assemblys zu verhindern.Note that a registry entry can be set on the computer to prevent APTCA-marked assemblies from running..

– Wenn die Anwendung als voll vertrauenswürdige Anwendung bereitgestellt wird, stellen Sie sicher, dass die Benutzer die Sicherheitseinstellungen für den Codezugriff nicht dahingehend ändern können, dass die Anwendung in einer teilweise vertrauenswürdigen Umgebung ausgeführt werden kann.-- Ensure that if the application is deployed as a fully-trusted application that users cannot modify the code-access security settings to run the application in a Partial Trust environment. Wenn sie dies können, dann wird die benutzerdefinierte Bestätigung nicht ausgeführt, und es wird keine Ausnahme ausgelöst.If they can do so, the custom validator does not run and no exception is thrown. Eine Möglichkeit, dies sicherzustellen, finden Sie unter der levelfinal -Option Code Access Security Policy-Tool (Caspol.exe).For one way to ensure this, see the levelfinal option using Code Access Security Policy Tool (Caspol.exe).

Weitere Informationen finden Sie unter teilweise Vertrauenswürdigkeit bewährte und Unterstützte Bereitstellungsszenarien.For more information, see Partial Trust Best Practices and Supported Deployment Scenarios.

So erstellen Sie eine EndpunktbestätigungTo create the endpoint validator

  1. Erstellen Sie ein IEndpointBehavior mit den gewünschten Validierungsschritten in der Validate-Methode.Create an IEndpointBehavior with the desired validation steps in the Validate method. Der folgende Code veranschaulicht dies.The following code provides an example. (Die InternetClientValidatorBehavior stammt aus dem Sicherheitsvalidierung Beispiel.)(The InternetClientValidatorBehavior is taken from the Security Validation sample.)

    public class InternetClientValidatorBehavior : IEndpointBehavior
    {
        public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters) { }
        public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.ClientRuntime behavior) { }
        public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher) { }
    
        public void Validate(ServiceEndpoint endpoint)
        {
            BindingElementCollection elements = endpoint.Binding.CreateBindingElements();
    
            if (EndpointIsDual(endpoint, elements))
                throw new InvalidOperationException("InternetClientValidator: endpoint uses 'dual' mode. This mode is disallowed for use with untrusted services.");
    
            if (EndpointAllowsNtlm(endpoint, elements))
                throw new InvalidOperationException("InternetClientValidator: endpoint allows NTLM. This mode is disallowed for use with untrusted services.");
    
            if (EndpointAllowsTransactionFlow(endpoint, elements))
                throw new InvalidOperationException("InternetClientValidator: endpoint flows transaction ids. This mode is disallowed for use with untrusted services.");
        }
    
  2. Erstellen Sie ein neues BehaviorExtensionElement, des die in Schritt 1 erstellte Endpunktbestätigung registriert.Create new BehaviorExtensionElement that registers the endpoint validator created in step 1. Dies wird im folgenden Codebeispiel gezeigt.The following code example shows this. (Der ursprüngliche Code für dieses Beispiel befindet sich in der Sicherheitsvalidierung Beispiel.)(The original code for this example is in the Security Validation sample.)

    public class InternetClientValidatorElement : BehaviorExtensionElement
    {
        public override Type BehaviorType
        {
            get { return typeof(InternetClientValidatorBehavior); }
        }
    
        protected override object CreateBehavior()
        {
            return new InternetClientValidatorBehavior();
        }
    }
    
  3. Stellen Sie sicher, dass die kompilierte Assembly mit einem starken Namen signiert wird.Make sure the compiled assembly is signed with a strong name. Weitere Informationen finden Sie unter der Strong Name-Tool ("sn". EXE-Datei) und die Compilerbefehle für Ihre Sprache.For details, see the Strong Name Tool (SN.EXE) and the compiler commands for your language.

So installieren Sie die Bestätigung auf dem ZielcomputerTo install the validator into the target computer

  1. Installieren Sie die Endpunktbestätigung mithilfe des entsprechenden Mechanismus.Install the endpoint validator using the appropriate mechanism. In einem Unternehmen kann dies die Verwendung der Gruppenrichtlinie und des Systems Management Server (SMS) sein.In an enterprise, this can be using Group Policy and Systems Management Server (SMS).

  2. Installieren Sie die Assembly mit starkem Namen in das global Assembly Cache mithilfe der Gacutil.exe (Global Assembly Cache-Tool).Install the strongly-named assembly into the global assembly cache using the Gacutil.exe (Global Assembly Cache Tool).

  3. Verwenden Sie die System.Configuration-Namespacetypen, um Folgendes durchzuführen:Use the System.Configuration namespace types to:

    1. Fügen Sie die Erweiterung der <BehaviorExtensions > Abschnitt eines vollqualifizierten Typnamens und Sperren Sie das Element.Add the extension to the <behaviorExtensions> section using a fully-qualified type name and lock the element.

      // Register our validator configuration element.
      ExtensionsSection extensions
        = machine.GetSection(@"system.serviceModel/extensions") as ExtensionsSection;
      if (extensions == null)
        throw new Exception("not extensions section.");
      ExtensionElement validator 
        = new ExtensionElement(
          "internetClientValidator", 
          "Microsoft.ServiceModel.Samples.InternetClientValidatorElement, InternetClientValidator, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
        );
      validator.LockItem = true;
      if (extensions.BehaviorExtensions.IndexOf(validator) < 0)
        extensions.BehaviorExtensions.Add(validator);
      
    2. Fügen Sie das verhaltenselement der EndpointBehaviors Eigenschaft von der <CommonBehaviors > Textabschnitt und Sperren Sie das Element.Add the behavior element to the EndpointBehaviors property of the <commonBehaviors> section and lock the element. (Um eine Bestätigung auf der Dienstseite zu installieren, muss die Bestätigung ein IServiceBehavior sein und zur ServiceBehaviors-Eigenschaft hinzugefügt werden.) Das folgende Codebeispiel veranschaulicht die ordnungsgemäße Konfiguration nach den Schritten a.(To install the validator on the service, the validator must be an IServiceBehavior and added to the ServiceBehaviors property.) The following code example shows the proper configuration after steps a. und b. Der einzige Unterschied ist, dass hier kein starker Name vergeben wird.and b., with the sole exception that there is no strong name.

      // Add a new section for our validator and lock it down.
      // Behaviors for client applications must be endpoint behaviors.
      // Behaviors for service applications must be service behaviors.
      CommonBehaviorsSection commonBehaviors
        = machine.GetSection(@"system.serviceModel/commonBehaviors") as CommonBehaviorsSection;
      InternetClientValidatorElement internetValidator = new InternetClientValidatorElement();
      internetValidator.LockItem = true;
      commonBehaviors.EndpointBehaviors.Add(internetValidator);
      
    3. Speichern Sie die Datei machine.config.Save the machine.config file. Das folgende Codebeispiel führt alle Aufgaben in Schritt 3 durch, speichert aber eine lokale Kopie der geänderten Datei machine.config.The following code example performs all the tasks in step 3 but saves a copy of the modified machine.config file locally.

      // Write to disk.
      machine.SaveAs("newMachine.config");
      
      // Write our new information.
      SectionInformation cBInfo = commonBehaviors.SectionInformation;
      Console.WriteLine(cBInfo.GetRawXml());
      Console.WriteLine(extensions.SectionInformation.GetRawXml());
      Console.Read();
      

BeispielExample

Das folgende Codebeispiel veranschaulicht, wie ein gemeinsames Verhalten zu einer machine.config-Datei hinzugefügt und wie eine Kopie auf der Festplatte gespeichert wird.The following code example shows how to add a common behavior to the machine.config file and save a copy to the disk. Die InternetClientValidatorBehavior stammt aus dem Sicherheitsvalidierung Beispiel.The InternetClientValidatorBehavior is taken from the Security Validation sample.

Configuration machine = ConfigurationManager.OpenMachineConfiguration();
// Register our validator configuration element.
ExtensionsSection extensions
  = machine.GetSection(@"system.serviceModel/extensions") as ExtensionsSection;
if (extensions == null)
  throw new Exception("not extensions section.");
ExtensionElement validator 
  = new ExtensionElement(
    "internetClientValidator", 
    "Microsoft.ServiceModel.Samples.InternetClientValidatorElement, InternetClientValidator, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
  );
validator.LockItem = true;
if (extensions.BehaviorExtensions.IndexOf(validator) < 0)
  extensions.BehaviorExtensions.Add(validator);
 
// Add a new section for our validator and lock it down.
// Behaviors for client applications must be endpoint behaviors.
// Behaviors for service applications must be service behaviors.
CommonBehaviorsSection commonBehaviors
  = machine.GetSection(@"system.serviceModel/commonBehaviors") as CommonBehaviorsSection;
InternetClientValidatorElement internetValidator = new InternetClientValidatorElement();
internetValidator.LockItem = true;
commonBehaviors.EndpointBehaviors.Add(internetValidator);
// Write to disk.
machine.SaveAs("newMachine.config");

// Write our new information.
SectionInformation cBInfo = commonBehaviors.SectionInformation;
Console.WriteLine(cBInfo.GetRawXml());
Console.WriteLine(extensions.SectionInformation.GetRawXml());
Console.Read();

.NET Framework-Sicherheit.NET Framework Security

Sie können darüber hinaus die Elemente der Konfigurationsdatei verschlüsseln.You may also want to encrypt the configuration file elements. Weitere Informationen finden Sie im Abschnitt "Siehe auch".For more information, see the See Also section.

Siehe auchSee Also

Verschlüsseln von konfigurationsdateielementen mit DPAPIEncrypting configuration file elements using DPAPI
Verschlüsseln von konfigurationsdateielementen mit RSAEncrypting configuration file elements using RSA