Freigeben über


Beispiel für nachrichtensicherheit

Das MessageSecurity-Beispiel veranschaulicht, wie eine Anwendung implementiert wird, die die Sicherheit von basicHttpBinding Nachrichten verwendet. Dieses Beispiel basiert auf dem Abschnitt Erste Schritte, der einen Rechnerdienst implementiert.

Hinweis

Die Einrichtungsverfahren und Build-Anweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Der Sicherheitsmodus basicHttpBinding kann auf die folgenden Werte festgelegt werden: Message, , Transport, und TransportWithMessageCredentialTransportCredentialOnlyNone. 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).

<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 Bindungskonfiguration legt das mode Attribut der <Sicherheit> auf Message und das clientCredentialType Attribut der <Nachricht> auf Certificate fest, wie in der folgenden Beispielkonfiguration dargestellt.

<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 Zertifikat, das der Dienst zum Authentifizieren für den Client verwendet, wird im Verhaltensabschnitt der Konfigurationsdatei unter dem serviceCredentials Element festgelegt. Der Überprüfungsmodus, der für das Zertifikat gilt, das der Client für die Authentifizierung beim Dienst verwendet, wird auch im Abschnitt "Verhalten" unter dem clientCertificate Element festgelegt.

<!--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 Sicherheitsdetails werden in der Clientkonfigurationsdatei angegeben.

Die Identität des Aufrufers wird im Dienstkonsolenfenster mithilfe des folgenden Codes angezeigt:

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

Wenn Sie das Beispiel ausführen, werden die Vorgangsanforderungen und -antworten im Clientkonsolenfenster angezeigt. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.

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 es

  1. Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.

  2. Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.

So führen Sie das Beispiel auf demselben Computer aus

  1. Führen Sie Setup.bat aus dem Beispiel-Installationsordner aus. Dadurch werden alle Zertifikate installiert, die für die Ausführung des Beispiels erforderlich sind.

    Hinweis

    Die Setup.bat Batchdatei soll über eine Windows SDK-Eingabeaufforderung ausgeführt werden. Sie erfordert, dass die MSSDK-Umgebungsvariable auf das Verzeichnis verweist, in dem das SDK installiert ist. Diese Umgebungsvariable wird automatisch in einer Windows SDK-Eingabeaufforderung festgelegt.

  2. Führen Sie die Dienstanwendung aus \service\bin aus.

  3. Führen Sie die Clientanwendung aus \client\bin aus. Clientaktivität wird in der Clientkonsolenanwendung angezeigt.

  4. Wenn der Client und der Dienst nicht kommunizieren können, schauen Sie sich Tipps zur Problembehandlung für WCF-Samplesan.

  5. Entfernen Sie die Zertifikate, indem Sie Cleanup.bat ausführen, wenn Sie mit dem Beispiel fertig sind. Andere Sicherheitsbeispiele verwenden dieselben Zertifikate.

So führen Sie das Beispiel computerübergreifend aus

  1. Erstellen Sie ein Verzeichnis auf dem Dienstcomputer für die Dienstbinärdateien.

  2. Kopieren Sie die Dienstprogrammdateien in das Dienstverzeichnis auf dem Server. Kopieren Sie außerdem die dateien Setup.bat, Cleanup.batund ImportClientCert.bat auf den Server.

  3. Erstellen Sie ein Verzeichnis auf dem Clientcomputer für die Client-Binärdateien.

  4. Kopieren Sie die Clientprogrammdateien in das Clientverzeichnis auf dem Clientcomputer. Kopieren Sie außerdem die Dateien Setup.bat, Cleanup.batund ImportServiceCert.bat auf den Client.

  5. Führen Sie setup.bat serviceauf dem Server aus. Durch das Ausführen von setup.bat mit dem service Argument wird ein Dienstzertifikat mit dem vollqualifizierten Domänennamen des Computers erstellt und das Dienstzertifikat in eine Datei namens Service.cer exportiert.

  6. Bearbeiten Sie Service.exe.config, um den neuen Zertifikatnamen (im findValue Attribut im <ServiceCertificate-Element> ) widerzuspiegeln, das dem vollqualifizierten Domänennamen des Computers entspricht. Ändern Sie auch den Wert der Basisadresse, um einen vollqualifizierten Computernamen anstelle von localhost anzugeben..

  7. Kopieren Sie die Service.cer Datei aus dem Dienstverzeichnis in das Clientverzeichnis auf dem Clientcomputer.

  8. Führen Sie auf dem Client setup.bat clientaus. Wenn Sie setup.bat mit dem Argument client ausführen, wird ein Clientzertifikat mit dem Namen client.com erstellt und das Clientzertifikat in eine Datei mit dem Namen Client.cer exportiert.

  9. Ändern Sie in der datei Client.exe.config auf dem Clientcomputer den Adresswert des Endpunkts so, dass er mit der neuen Adresse Ihres Diensts übereinstimmt. Ersetzen Sie dazu localhost durch den vollqualifizierten Domänennamen des Servers. Ändern Sie auch das findValue Attribut des <defaultCertificate> in den neuen Dienstzertifikatnamen, der den vollqualifizierten Domänennamen des Servers darstellt.

  10. Kopieren Sie die Client.cer Datei aus dem Clientverzeichnis in das Dienstverzeichnis auf dem Server.

  11. Führen Sie auf dem Client ImportServiceCert.bataus. Dadurch wird das Dienstzertifikat aus der Service.cer-Datei in den Speicher CurrentUser - TrustedPeople importiert.

  12. Führen Sie auf dem Server ImportClientCert.bataus. Dadurch wird das Clientzertifikat aus der Client.cer-Datei in den LocalMachine - TrustedPeople-Speicher importiert.

  13. Führen Sie auf dem Dienstcomputer die Datei "Service.exe" über eine Eingabeaufforderung aus.

  14. Starten Sie auf dem Clientcomputer Client.exe über ein Eingabeaufforderungsfenster.

    1. Wenn der Client und der Dienst nicht kommunizieren können, schauen Sie sich Tipps zur Problembehandlung für WCF-Samplesan.

So stellen Sie den Zustand vor Ausführung des Beispiels wieder her

  • Führen Sie Cleanup.bat im Beispielordner aus, nachdem Sie die Ausführung des Beispiels abgeschlossen haben.

    Hinweis

    Dieses Skript entfernt keine Dienstzertifikate auf einem Client, wenn dieses Beispiel auf computernübergreifend ausgeführt wird. Wenn Sie Windows Communication Foundation (WCF)-Beispiele ausgeführt haben, die Zertifikate über mehrere Computer hinweg verwenden, sollten Sie die Dienstzertifikate löschen, die im CurrentUser - TrustedPeople-Speicher installiert wurden. 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