Dela via


Exempel på meddelandesäkerhet

Exemplet MessageSecurity visar hur du implementerar ett program som använder basicHttpBinding meddelandesäkerheten och . Det här exemplet baseras på komma igång som implementerar en kalkylatortjänst.

Kommentar

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

Säkerhetsläget basicHttpBinding för kan anges till följande värden: Message, Transport, TransportWithMessageCredentialoch TransportCredentialOnlyNone. I följande exempeltjänstfil App.config anger slutpunktsdefinitionen basicHttpBinding och refererar till en bindningskonfiguration med namnet Binding1, enligt följande exempelkonfiguration:

<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>

Bindningskonfigurationen mode anger attributet <för säkerheten> till Message och anger clientCredentialType attributet< för meddelandet> till Certificate enligt följande exempelkonfiguration:

<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>

Certifikatet som tjänsten använder för att autentisera sig själv till klienten anges i avsnittet beteenden i konfigurationsfilen under elementet serviceCredentials . Valideringsläget som gäller för certifikatet som klienten använder för att autentisera sig själv till tjänsten anges också i avsnittet beteenden under elementet clientCertificate .

<!--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>

Samma bindnings- och säkerhetsinformation anges i klientkonfigurationsfilen.

Anroparens identitet visas i tjänstkonsolfönstret med hjälp av följande kod:

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

När du kör exemplet visas åtgärdsbegäranden och svar i klientkonsolfönstret. Tryck på RETUR i klientfönstret för att stänga av klienten.

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.

Så här konfigurerar och skapar du exemplet

  1. Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

  2. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

Så här kör du exemplet på samma dator

  1. Kör Setup.bat från exempelinstallationsmappen. Detta installerar alla certifikat som krävs för att köra exemplet.

    Kommentar

    Den Setup.bat batchfilen är utformad för att köras från en Windows SDK-kommandotolk. Det kräver att miljövariabeln MSSDK pekar på katalogen där SDK:et är installerat. Den här miljövariabeln anges automatiskt i en Windows SDK-kommandotolk.

  2. Kör tjänstprogrammet från \service\bin.

  3. Kör klientprogrammet från \client\bin. Klientaktiviteten visas i klientkonsolprogrammet.

  4. Om klienten och tjänsten inte kan kommunicera kan du läsa Felsökningstips för WCF-exempel.

  5. Ta bort certifikaten genom att köra Cleanup.bat när du är klar med exemplet. Andra säkerhetsexempel använder samma certifikat.

Så här kör du exemplet mellan datorer

  1. Skapa en katalog på tjänstdatorn för tjänstens binärfiler.

  2. Kopiera tjänstprogramfilerna till tjänstkatalogen på servern. Kopiera även filerna Setup.bat, Cleanup.bat och ImportClientCert.bat till servern.

  3. Skapa en katalog på klientdatorn för klient binärfilerna.

  4. Kopiera klientprogramfilerna till klientkatalogen på klientdatorn. Kopiera även filerna Setup.bat, Cleanup.bat och ImportServiceCert.bat till klienten.

  5. Kör på servern setup.bat service. När du service kör setup.bat med argumentet skapas ett tjänstcertifikat med datorns fullständigt kvalificerade domännamn och tjänstcertifikatet exporteras till en fil med namnet Service.cer.

  6. Redigera Service.exe.config för att återspegla det nya certifikatnamnet (i findValue attributet i elementet <serviceCertificate> ) som är samma som datorns fullständigt kvalificerade domännamn. Ändra också värdet för basadressen för att ange ett fullständigt kvalificerat datornamn i stället för localhost.

  7. Kopiera Service.cer-filen från tjänstkatalogen till klientkatalogen på klientdatorn.

  8. Kör på klienten setup.bat client. När du kör setup.bat med client argumentet skapas ett klientcertifikat med namnet client.com och klientcertifikatet exporteras till en fil med namnet Client.cer.

  9. I filen Client.exe.config på klientdatorn ändrar du slutpunktens adressvärde så att det matchar tjänstens nya adress. Det gör du genom att ersätta localhost med serverns fullständigt kvalificerade domännamn. Ändra findValue även attributet <för defaultCertificate> till det nya tjänstcertifikatnamnet som är serverns fullständigt kvalificerade domännamn.

  10. Kopiera Client.cer-filen från klientkatalogen till tjänstkatalogen på servern.

  11. Kör ImportServiceCert.bat på klienten. Detta importerar tjänstcertifikatet från filen Service.cer till arkivet CurrentUser – Trusted Personer.

  12. Kör ImportClientCert.bat på servern. Detta importerar klientcertifikatet från Client.cer-filen till arkivet LocalMachine – Trusted Personer.

  13. På tjänstdatorn kör du Service.exe från en kommandotolk.

  14. Starta Client.exe från kommandotolken på klientdatorn.

    1. Om klienten och tjänsten inte kan kommunicera kan du läsa Felsökningstips för WCF-exempel.

Rensa efter exemplet

  • Kör Cleanup.bat i exempelmappen när du har kört exemplet.

    Kommentar

    Det här skriptet tar inte bort tjänstcertifikat på en klient när du kör det här exemplet på flera datorer. Om du har kört WCF-exempel (Windows Communication Foundation) som använder certifikat mellan datorer måste du rensa de tjänstcertifikat som har installerats i arkivet CurrentUser – Trusted Personer. Det gör du genom att använda följande kommando: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Till exempel: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com