Dela via


Exempel på meddelandesäkerhet

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

Anmärkning

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änst App.config fil 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 clientCredentialTypeattributet< 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 One-Time installationsproceduren 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.

    Anmärkning

    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 Setup.bat, Cleanup.batoch ImportClientCert.bat filer till servern.

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

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

  5. Kör setup.bat servicepå servern. Att köra setup.bat med service argumentet skapar ett tjänstcertifikat med den fullständigt kvalificerade domännamnet för datorn och exporterar tjänstcertifikatet till en fil med namnet Service.cer.

  6. Redigera Service.exe.config för att återspegla det nya certifikatnamnet (i findValueattributet 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 setup.bat clientpå klienten . När du kör setup.bat med argumentet client 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.batpå klienten . Detta importerar tjänstcertifikatet från filen Service.cer till lagringsplatsen CurrentUser – TrustedPeople.

  12. På servern kör du ImportClientCert.bat, detta importerar klientcertifikatet från Client.cer-filen till LocalMachine – TrustedPeople-arkivet.

  13. På servicedatorn kör du Service.exe från kommandotolken.

  14. Starta Client.exe från ett kommandopromptfönster på klientmaskinen.

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

Att städa upp efter provet

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

    Anmärkning

    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 CurrentUser – TrustedPeople-arkivet. 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