Beispiel für NachrichtensicherheitMessage Security Sample

In diesem Beispiel wird veranschaulicht, wie eine Anwendung implementiert wird, die basicHttpBinding und Nachrichtensicherheit verwendet.This sample demonstrates how to implement an application that uses the basicHttpBinding and message security. Dieses Beispiel basiert auf der Einstieg , implementiert einen rechnerdienst.This sample is based on the Getting Started that implements a calculator service.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Der Sicherheitsmodus von basicHttpBinding kann auf die folgenden Werte festgelegt werden: Message, Transport, TransportWithMessageCredential, TransportCredentialOnly und None.The security mode of basicHttpBinding can be set to the following values: Message, Transport, TransportWithMessageCredential, TransportCredentialOnly and None. In der folgenden Datei "App.config" des Beispieldiensts gibt die Endpunktdefinition die basicHttpBinding an und verweist auf die Bindungskonfiguration Binding1 (wie in folgender Beispielkonfiguration gezeigt).In the following sample service App.config file, the endpoint definition specifies the basicHttpBinding and references a binding configuration named Binding1, as shown in the following sample configuration:

<system.serviceModel>  
  <services>  
    <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
             behaviorConfiguration="CalculatorServiceBehavior">  
     <!-- This endpoint is exposed at the base address provided by -->  
     <!-- host: http://localhost:8000/ServiceModelSamples/service.-->  
     <endpoint address=""  
               binding="basicHttpBinding"  
               bindingConfiguration="Binding1"   
               contract="Microsoft.ServiceModel.Samples.ICalculator" />  
    </service>  
  </services>   …  
</system.serviceModel>  

Die Bindung Konfigurationssätze der mode Attribut des der <Sicherheit > auf Message und legt sie fest der clientCredentialType Attribut des der <Nachricht >zu Certificate wie in der folgenden Beispielkonfiguration gezeigt:The binding configuration sets the mode attribute of the <security> to Message and sets the clientCredentialType attribute of the <message> to Certificate as shown in the following sample configuration:

<bindings>  
  <basicHttpBinding>  
    <!--   
        This configuration defines the SecurityMode as Message and   
        the clientCredentialType as Certificate.  
        -->  
    <binding name="Binding1" >  
      <security mode = "Message">  
        <message clientCredentialType="Certificate"/>  
      </security>  
    </binding>  
  </basicHttpBinding>  
</bindings>  

Das vom Dienst zum Authentifizieren beim Client verwendete Zertifikat wird im Verhaltensabschnitt der Konfigurationsdatei im Element serviceCredentials festgelegt.The certificate that the service uses to authenticate itself to the client is set in the behaviors section of the configuration file under the serviceCredentials element. Der Prüfungsmodus für das Zertifikat, das der Client zum Authentifizieren beim Dienst verwendet, ist auch im Verhaltensabschnitt im clientCertificate-Element festgelegt.The validation mode that applies to the certificate that the client uses to authenticate itself to the service is also set in the behaviors section under the clientCertificate element.

<!--For debugging purposes, set the includeExceptionDetailInFaults attribute to true.-->  
<behaviors>  
  <serviceBehaviors>  
    <behavior name="CalculatorServiceBehavior">  
      <serviceMetadata httpGetEnabled="True"/>  
      <serviceDebug includeExceptionDetailInFaults="False" />  
      <!--The serviceCredentials behavior allows one to define a -->  
      <!--service certificate. A service certificate is used by a -->  
      <!--client to authenticate the service and provide message -->  
      <!-- protection. This configuration references the "localhost"-->  
      <!--certificate installed during the setup instructions. -->  
      <serviceCredentials>  
        <serviceCertificate findValue="localhost"  
               storeLocation="LocalMachine"   
               storeName="My" x509FindType="FindBySubjectName" />  
        <clientCertificate>  
          <!-- Setting the certificateValidationMode to -->  
          <!-- PeerOrChainTrust means that if the certificate -->  
          <!--is in the user's Trusted People store, then it is -->  
          <!-- trusted without performing a validation of the -->  
          <!-- certificate's issuer chain. This setting is used -->  
          <!-- here for convenience so that the sample can be run -->  
          <!-- without having to have certificates issued by a -->  
          <!-- certification authority (CA). -->  
          <!-- This setting is less secure than the default, -->  
          <!-- ChainTrust. The security implications of this -->  
          <!-- setting should be carefully considered before using -->  
          <!-- PeerOrChainTrust in production code. -->  
          <authentication   
                       certificateValidationMode="PeerOrChainTrust" />  
        </clientCertificate>  
      </serviceCredentials>  
    </behavior>  
  </serviceBehaviors>  
</behaviors>  

Die gleichen Bindungs- und Sicherheitsinformationen sind in der Clientkonfigurationsdatei angegeben.The same binding and security details are specified in the client configuration file.

Die Identität des Aufrufers wird im Dienstkonsolenfenster angezeigt, indem folgender Code verwendet wird:The identity of the caller is displayed in the service console window by using the following code:

Console.WriteLine("Called by {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);  

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt.When you run the sample, the operation requests and responses are displayed in the client console window. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

Add(100,15.99) = 115.99  
Subtract(145,76.54) = 68.46  
Multiply(9,81.25) = 731.25  
Divide(22,7) = 3.14285714285714  
Press <ENTER> to terminate client.  

So richten Sie das Beispiel ein und erstellen esTo set up and build 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. 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.

So führen Sie das Beispiel auf demselben Computer ausTo run the sample on the same machine

  1. Führen Sie "Setup.bat" im Beispielinstallationsordner aus.Run Setup.bat from the sample install folder. Hiermit werden alle Zertifikate installiert, die zum Ausführen des Beispiels erforderlich sind.This installs all the certificates required for running the sample.

    Hinweis

    Die Batchdatei "Setup.bat" ist dafür ausgelegt, von einer Windows SDK-Eingabeaufforderung ausgeführt zu werden.The Setup.bat batch file is designed to be run from a Windows SDK Command Prompt. Die MSSDK-Umgebungsvariable muss auf das Verzeichnis zeigen, in dem das SDK installiert ist.It requires that the MSSDK environment variable point to the directory where the SDK is installed. Diese Umgebungsvariable wird automatisch innerhalb einer Windows SDK-Eingabeaufforderung festgelegt.This environment variable is automatically set within a Windows SDK Command Prompt.

  2. Führen Sie die Dienstanwendung in "\service\bin" aus.Run the service application from \service\bin.

  3. Führen Sie die Clientanwendung in "\client\bin" aus.Run the client application from \client\bin. In der Clientkonsolenanwendung wird Clientaktivität angezeigt.Client activity is displayed on the client console application.

  4. Wenn Client und Dienst nicht miteinander kommunizieren können, finden Sie unter Tipps zur Problembehandlung.If the client and service are not able to communicate, see Troubleshooting Tips.

  5. Wenn Sie mit dem Beispiel fertig sind, führen Sie die Datei Cleanup.bat aus, um die Zertifikate zu entfernen.Remove the certificates by running Cleanup.bat when you have finished with the sample. In anderen Sicherheitsbeispielen werden die gleichen Zertifikate verwendet.Other security samples use the same certificates.

So führen Sie das Beispiel computerübergreifend ausTo run the sample across machines

  1. Erstellen Sie auf dem Dienstcomputer ein Verzeichnis für die Dienstbinärdateien.Create a directory on the service machine for the service binaries.

  2. Kopieren Sie die Dienstprogrammdateien in das Dienstverzeichnis auf dem Server.Copy the service program files to the service directory on the server. Kopieren Sie auch die Dateien "Setup.bat", "Cleanup.bat" und "ImportClientCert.bat" auf den Server.Also copy the Setup.bat, Cleanup.bat, and ImportClientCert.bat files to the server.

  3. Erstellen Sie auf dem Clientcomputer ein Verzeichnis für die Clientbinärdateien.Create a directory on the client machine for the client binaries.

  4. Kopieren Sie die Clientprogrammdateien in das Clientverzeichnis auf dem Clientcomputer.Copy the client program files to the client directory on the client machine. Kopieren Sie die Dateien "Setup.bat", "Cleanup.bat" und "ImportServiceCert.bat" ebenfalls auf den Client.Also copy the Setup.bat, Cleanup.bat, and ImportServiceCert.bat files to the client.

  5. Führen Sie auf dem Server setup.bat service aus.On the server, run setup.bat service. Ausführen setup.bat mit der service Argument wird ein Dienstzertifikat mit dem vollqualifizierten Domänennamen des Computers erstellt und das Dienstzertifikat in eine Datei "Service.cer" exportiert exportiert.Running setup.bat with the service argument creates a service certificate with the fully-qualified domain name of the machine and exports the service certificate to a file named Service.cer.

  6. Bearbeiten Service.exe.config, um den neuen Zertifikatnamen entspricht (in der findValue Attribut in der <ServiceCertificate > Element) die ist identisch mit den vollqualifizierten Domänennamen des Computers.Edit Service.exe.config to reflect the new certificate name (in the findValue attribute in the <serviceCertificate> element) which is the same as the fully-qualified domain name of the machine. Ändern Sie auch den Wert der Basisadresse, um anstelle von "localhost" einen vollqualifizierten Computernamen anzugeben.Also change the value of the base address to specify a fully-qualified machine name instead of localhost.

  7. Kopieren Sie die Datei Service.cer aus dem Dienstverzeichnis in das Clientverzeichnis auf dem Clientcomputer.Copy the Service.cer file from the service directory to the client directory on the client machine.

  8. Führen Sie auf dem Client setup.bat client aus.On the client, run setup.bat client. Durch Ausführen von setup.bat mit dem Argument client wird ein Clientzertifikat mit dem Namen client.com erstellt und in die Datei Client.cer exportiert.Running setup.bat with the client argument creates a client certificate named client.com and exports the client certificate to a file named Client.cer.

  9. Ändern Sie in der Datei "Client.exe.config" auf dem Clientcomputer den Wert für die Adresse des Endpunkts so, dass er mit der neuen Adresse Ihres Diensts übereinstimmt.In the Client.exe.config file on the client machine, change the address value of the endpoint to match the new address of your service. Ersetzen Sie dazu localhost durch den vollqualifizierten Domänennamen des Servers.You do this by replacing localhost with the fully-qualified domain name of the server. Ändern Sie auch die findValue Attribut des der <DefaultCertificate > in den neuen Dienst Zertifikatnamen, die den vollqualifizierten Domänennamen des Servers ist.Also change the findValue attribute of the <defaultCertificate> to the new service certificate name which is the fully-qualified domain name of the server.

  10. Kopieren Sie die Datei Client.cer aus dem Clientverzeichnis in das Dienstverzeichnis auf dem Server.Copy the Client.cer file from the client directory to the service directory on the server.

  11. Führen Sie auf dem Client "ImportServiceCert.bat" aus.On the client, run ImportServiceCert.bat. Dadurch wird das Dienstzertifikat aus der Datei Service.cer in den Speicher CurrentUser – TrustedPeople importiert.This imports the service certificate from the Service.cer file into the CurrentUser - TrustedPeople store.

  12. Führen Sie auf dem Server "ImportClientCert.bat" aus. Dadurch wird das Clientzertifikat von der Datei "Client.cer" in den LocalMachine – TrustedPeople-Speicher importiert.On the server, run ImportClientCert.bat, This imports the client certificate from the Client.cer file into the LocalMachine - TrustedPeople store.

  13. Führen Sie auf dem Dienstcomputer die Datei "Service.exe" über eine Eingabeaufforderung aus.On the service machine, run Service.exe from a command prompt.

  14. Starten Sie auf dem Clientcomputer Client.exe in einem Eingabeaufforderungsfenster.On the client machine, launch Client.exe from a command prompt window.

    1. Wenn Client und Dienst nicht miteinander kommunizieren können, finden Sie unter Tipps zur Problembehandlung.If the client and service are not able to communicate, see Troubleshooting Tips.

So stellen Sie den Zustand vor Ausführung des Beispiels wieder herTo clean up after the sample

  • Führen Sie Cleanup.bat im Beispielordner aus, nachdem Sie das Beispiel fertig ausgeführt haben.Run Cleanup.bat in the samples folder once you have finished running the sample.

    Hinweis

    Wenn dieses Beispiel computerübergreifend ausgeführt wird, entfernt dieses Skript keine Dienstzertifikate auf einem Client.This script does not remove service certificates on a client when running this sample across machines. Wenn Sie Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Beispiele ausgeführt haben, die Zertifikate computerübergreifend verwenden, müssen Sie die Dienstzertifikate entfernen, die im Speicher CurrentUser - TrustedPeople installiert wurden.If you have run Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) samples that use certificates across machines, be sure to clear the service certificates that have been installed in the CurrentUser - TrustedPeople store. Verwenden Sie dazu den folgenden Befehl: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Beispiel: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.To do this, use the following command: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. 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, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.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)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\Binding\Basic\MessageSecurity

Siehe auchSee Also