Sdílet prostřednictvím


Ukázka zabezpečení zpráv

Ukázka MessageSecurity demonstruje, jak implementovat aplikaci, která používá basicHttpBinding zabezpečení zpráv. Tato ukázka vychází ze služby Začínáme , která implementuje službu kalkulačky.

Poznámka:

Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.

Režim basicHttpBinding zabezpečení lze nastavit na následující hodnoty: Message, Transport, TransportWithMessageCredentialTransportCredentialOnly a None. V následujícím ukázkovém souboru služby App.config definice koncového bodu určuje basicHttpBinding a odkazuje na konfiguraci vazby s názvem Binding1, jak je znázorněno v následující ukázkové konfiguraci:

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

Konfigurace vazby nastaví atribut mode zabezpečení <> na Message a atribut zprávy clientCredentialType<> na Certificate, jak je znázorněno v následující ukázkové konfiguraci.

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

Certifikát, který služba používá k ověření klienta, je nastaven v části chování konfiguračního souboru pod elementem serviceCredentials . Režim ověřování, který se vztahuje na certifikát, který klient používá k ověření ve službě, je také nastaven v části chování pod prvkem 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>

V konfiguračním souboru klienta jsou zadané stejné podrobnosti o vazbě a zabezpečení.

Identita volajícího se zobrazí v okně konzoly služby pomocí následujícího kódu:

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

Při spuštění ukázky se požadavky na operace a odpovědi zobrazí v okně konzoly klienta. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.

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.

Nastavení a sestavení ukázky

  1. Ujistěte se, že jste provedli instalační proceduru One-Time pro ukázky Windows Communication Foundation.

  2. Pokud chcete sestavit verzi C# nebo Visual Basic .NET řešení, postupujte podle pokynů v Sestavení ukázek Windows Communication Foundation.

Pro spuštění ukázky na stejném počítači

  1. Spusťte Setup.bat z ukázkové instalační složky. Tím se nainstalují všechny certifikáty potřebné pro spuštění ukázky.

    Poznámka:

    Dávkový soubor Setup.bat je navržený tak, aby běžel z příkazového řádku sady Windows SDK. Vyžaduje, aby proměnná prostředí MSSDK odkazovala na adresář, ve kterém je sada SDK nainstalovaná. Tato proměnná prostředí se automaticky nastaví v příkazovém řádku prostředí Windows SDK.

  2. Spusťte aplikaci služby z \service\bin.

  3. Spusťte klientskou aplikaci z \client\bin. Aktivita klienta se zobrazí v aplikaci konzoly klienta.

  4. Pokud klient a služba nemůžou komunikovat, přečtěte si Tipy pro řešení potíží v ukázkách WCF.

  5. Po dokončení ukázky odeberte certifikáty spuštěním Cleanup.bat. Jiné ukázky zabezpečení používají stejné certifikáty.

Spuštění ukázky na různých počítačích

  1. Vytvořte adresář na počítači služby pro binární soubory služby.

  2. Zkopírujte soubory programu služby do adresáře služby na serveru. Zkopírujte také soubory Setup.bat, Cleanup.bata ImportClientCert.bat na server.

  3. Vytvořte adresář na klientském počítači pro binární soubory klienta.

  4. Zkopírujte soubory klientského programu do klientského adresáře na klientském počítači. Zkopírujte také soubory Setup.bat, Cleanup.bata ImportServiceCert.bat do klienta.

  5. Na serveru spusťte setup.bat service. Spuštění setup.bat s argumentem service vytvoří certifikát služby s plně kvalifikovaným názvem domény počítače a exportuje certifikát služby do souboru s názvem Service.cer.

  6. Upravte Service.exe.config tak, aby odrážel nový název certifikátu (v findValue atributu v elementu <serviceCertificate> ), který je stejný jako plně kvalifikovaný název domény počítače. Změňte také hodnotu základní adresy tak, aby se místo localhost zadal plně kvalifikovaný název počítače..

  7. Zkopírujte soubor Service.cer z adresáře služby do klientského adresáře na klientském počítači.

  8. Na klientovi spusťte setup.bat client. Spuštění setup.bat s argumentem client vytvoří klientský certifikát s názvem client.com a exportuje klientský certifikát do souboru s názvem Client.cer.

  9. V souboru Client.exe.config na klientském počítači změňte hodnotu adresy koncového bodu tak, aby odpovídala nové adrese vaší služby. Provedete to tak, že nahradíte localhost plně kvalifikovaným názvem domény serveru. Změňte findValue také atribut <defaultCertificate> na nový název certifikátu služby, což je plně kvalifikovaný název domény serveru.

  10. Zkopírujte soubor Client.cer z klientského adresáře do adresáře služby na serveru.

  11. Na klientovi spusťte ImportServiceCert.bat. Tím se certifikát služby naimportuje ze souboru Service.cer do úložiště CurrentUser – TrustedPeople.

  12. Na serveru spusťte ImportClientCert.bat. Tím se naimportuje klientský certifikát ze souboru Client.cer do úložiště LocalMachine – TrustedPeople.

  13. Na počítači služby spusťte Service.exe z příkazového řádku.

  14. Na klientském počítači spusťte Client.exe z okna příkazového řádku.

    1. Pokud klient a služba nemůžou komunikovat, přečtěte si Tipy pro řešení potíží v ukázkách WCF.

Úklid po vzorku

  • Po dokončení spuštění ukázky spusťte Cleanup.bat ve složce s ukázkami.

    Poznámka:

    Tento skript neodebere certifikáty služeb na klientském zařízení při spuštění této ukázky na více zařízeních. Pokud jste spustili ukázky wcf (Windows Communication Foundation), které používají certifikáty napříč počítači, nezapomeňte vymazat certifikáty služby nainstalované v úložišti CurrentUser – TrustedPeople. K tomu použijte následující příkaz: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Například: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com