Sdílet prostřednictvím


Zabezpečení vlastních vazeb

Tato ukázka ukazuje, jak nakonfigurovat zabezpečení pomocí vlastní vazby. Ukazuje, jak pomocí vlastní vazby povolit zabezpečení na úrovni zpráv společně se zabezpečeným přenosem. To je užitečné, když je pro přenos zpráv mezi klientem a službou vyžadován zabezpečený přenos zpráv a současně musí být zprávy zabezpečené na úrovni zprávy. Tato konfigurace není podporována systémovými vazbami.

Tato ukázka se skládá z programu konzoly klienta (EXE) a konzolového programu služby (EXE). Služba implementuje duplexní kontrakt. Kontrakt je definován ICalculatorDuplex rozhraním, které zveřejňuje matematické operace (sčítání, odčítání, násobení a dělení). Rozhraní ICalculatorDuplex umožňuje klientovi provádět matematické operace a vypočítat průběžný výsledek v relaci. Nezávisle na sobě může služba vracet výsledky v ICalculatorDuplexCallback rozhraní. Duplexní kontrakt vyžaduje relaci, protože musí být vytvořen kontext pro korelaci sady zpráv odesílaných mezi klientem a službou. Vlastní vazba je definována, která podporuje duplexní komunikaci a je zabezpečená.

Poznámka:

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

Konfigurace služby definuje vlastní vazbu, která podporuje následující:

  • Komunikace TCP chráněná pomocí protokolu TLS/SSL.

  • Zabezpečení zpráv systému Windows.

Konfigurace vlastních vazeb umožňuje zabezpečený přenos tím, že současně povolí zabezpečení na úrovni zpráv. Řazení prvků vazby je důležité při definování vlastní vazby, protože každá představuje vrstvu v zásobníku kanálu (viz vlastní vazby). Vlastní vazba je definována v konfiguračních souborech služby a klienta, jak je znázorněno v následující ukázkové konfiguraci.

<bindings>
  <!-- Configure a custom binding. -->
  <customBinding>
    <binding name="Binding1">
      <security authenticationMode="SecureConversation"
                 requireSecurityContextCancellation="true">
      </security>
      <textMessageEncoding messageVersion="Soap12WSAddressing10" writeEncoding="utf-8"/>
      <sslStreamSecurity requireClientCertificate="false"/>
      <tcpTransport/>
    </binding>
  </customBinding>
</bindings>

Vlastní vazba používá certifikát služby k ověření služby na úrovni přenosu a k ochraně zpráv během přenosu mezi klientem a službou. Toho se dosahuje elementem vazby sslStreamSecurity . Certifikát služby je nakonfigurovaný pomocí chování služby, jak je znázorněno v následující ukázkové konfiguraci.

<behaviors>
    <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
        <serviceMetadata />
        <serviceDebug includeExceptionDetailInFaults="False" />
        <serviceCredentials>
        <serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
        </serviceCredentials>
    </behavior>
    </serviceBehaviors>
</behaviors>

Kromě toho vlastní vazba používá zabezpečení zpráv s typem přihlašovacích údajů systému Windows – toto je výchozí typ přihlašovacích údajů. Toho se dosahuje elementem vazby security . Klient i služba se ověřují pomocí zabezpečení na úrovni zpráv, pokud je k dispozici mechanismus ověřování Kerberos. K tomu dochází v případě, že se ukázka spustí v prostředí služby Active Directory. Pokud mechanismus ověřování kerberos není k dispozici, použije se ověřování NTLM. NTLM ověřuje klienta ve službě, ale neověře službu klientovi. Element security vazby je nakonfigurován pro použití SecureConversation authenticationType, což vede k vytvoření relace zabezpečení na klientovi i službě. To je nutné k tomu, aby duplexní kontrakt služby fungoval.

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.

Press <ENTER> to terminate client.
Result(100)
Result(50)
Result(882.5)
Result(441.25)
Equation(0 + 100 - 50 * 17.65 / 2 = 441.25)

Při spuštění ukázky se zobrazí zprávy vrácené klientovi v rozhraní zpětného volání odeslaného ze služby. Zobrazí se každý zprostředkující výsledek následovaný celou rovnicí po dokončení všech operací. Stisknutím klávesy ENTER ukončete klienta.

Zahrnutý soubor Setup.bat umožňuje nakonfigurovat klienta a server s příslušným certifikátem služby pro spuštění hostované aplikace, která vyžaduje zabezpečení založené na certifikátech. Tento dávkový soubor musí být upraven tak, aby fungoval v počítačích nebo aby fungoval v případě, že není hostovaný.

Následuje stručný přehled různých částí dávkových souborů, které se vztahují na tuto ukázku, aby je bylo možné upravit tak, aby běžely v příslušné konfiguraci:

  • Vytvoření certifikátu serveru

    Následující řádky ze souboru Setup.bat vytvoří certifikát serveru, který se má použít. Proměnná %SERVER_NAME% určuje název serveru. Změňte tuto proměnnou tak, aby byla zadána vlastní název serveru. Tento dávkový soubor ve výchozím nastavení nastaví název serveru na localhost.

    Certifikát je uložen v úložišti CurrentUser pro služby hostované webem.

    echo ************
    echo Server cert setup starting
    echo %SERVER_NAME%
    echo ************
    echo making server cert
    echo ************
    makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -pe
    
  • Instalace certifikátu serveru do důvěryhodného úložiště certifikátů klienta

    Následující řádky v souboru Setup.bat zkopírují certifikát serveru do úložiště důvěryhodných osob klienta. Tento krok je povinný, protože certifikáty generované Makecert.exe nejsou implicitně důvěryhodné klientským systémem. Pokud už máte certifikát, který je kořenový v kořenovém certifikátu klienta ( například certifikát vydaný Microsoftem), tento krok naplnění úložiště klientských certifikátů certifikátem pomocí certifikátu serveru se nevyžaduje.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople
    

    Poznámka:

    Dávkový soubor Setup.bat je navržený tak, aby běžel z příkazového řádku sady Visual Studio 2010. 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 sady Visual Studio 2010.

Nastavení, sestavení a spuštění ukázky

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

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

  3. Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.

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

  1. Otevřete okno Příkazového řádku pro vývojáře pro Visual Studio s oprávněními správce a 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 Visual Studio. Proměnná prostředí PATH nastavená v příkazovém řádku sady Visual Studio odkazuje na adresář, který obsahuje spustitelné soubory vyžadované skriptem Setup.bat.

  2. Spusťte Service.exe ze souboru \service\bin.

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

  4. Pokud klient a služba nemůžou komunikovat, podívejte se na tipy pro řešení potíží s ukázkami WCF.

Spuštění ukázky napříč počítači

  1. Na počítači služby:

    1. Na počítači služby vytvořte virtuální adresář s názvem servicemodelsamples.

    2. Zkopírujte soubory programu služby z \inetpub\wwwroot\servicemodelsamples do virtuálního adresáře v počítači služby. Ujistěte se, že kopírujete soubory v podadresáři \bin.

    3. Zkopírujte soubory Setup.bat a Cleanup.bat do počítače služby.

    4. V příkazovém řádku pro vývojáře pro Visual Studio otevřené s oprávněními správce spusťte následující příkaz: Setup.bat service. Tím se vytvoří certifikát služby s názvem subjektu, který odpovídá názvu počítače, na který byl dávkový soubor spuštěn.

      Poznámka:

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

    5. <Změňte serviceCertificate> uvnitř souboru Service.exe.config tak, aby odrážel název subjektu certifikátu vygenerovaného v předchozím kroku.

    6. Spusťte Service.exe z příkazového řádku.

  2. Na klientském počítači:

    1. Zkopírujte soubory klientského programu ze složky \client\bin\ do klientského počítače. Zkopírujte také soubor Cleanup.bat.

    2. Spuštěním Cleanup.bat odeberte všechny staré certifikáty z předchozích ukázek.

    3. Exportujte certifikát služby otevřením příkazového řádku pro vývojáře pro Visual Studio s oprávněními správce a spuštěním následujícího příkazu na počítači služby (nahraďte %SERVER_NAME% plně kvalifikovaným názvem počítače, na kterém je služba spuštěná):

      certmgr -put -r LocalMachine -s My -c -n %SERVER_NAME% %SERVER_NAME%.cer
      
    4. Zkopírujte %SERVER_NAME%.cer do klientského počítače (nahraďte %SERVER_NAME% plně kvalifikovaným názvem počítače, na kterém je služba spuštěná).

    5. Importujte certifikát služby otevřením příkazového řádku pro vývojáře pro Visual Studio s oprávněními správce a spuštěním následujícího příkazu na klientském počítači (nahraďte %SERVER_NAME% plně kvalifikovaným názvem počítače, na kterém je služba spuštěná):

      certmgr.exe -add -c %SERVER_NAME%.cer -s -r CurrentUser TrustedPeople
      

      Kroky c, d a e nejsou nutné, pokud certifikát vydá důvěryhodný vystavitel.

    6. Upravte soubor App.config klienta následujícím způsobem:

      <client>
          <endpoint name="default"
              address="net.tcp://ReplaceThisWithServiceMachineName:8000/ServiceModelSamples/Service"
              binding="customBinding"
              bindingConfiguration="Binding1"
              contract="Microsoft.ServiceModel.Samples.ICalculatorDuplex"
              behaviorConfiguration="CalculatorClientBehavior" />
      </client>
      
    7. Pokud je služba spuštěná pod jiným účtem než NetworkService nebo LocalSystem v doménovém prostředí, možná budete muset upravit identitu koncového bodu pro koncový bod služby v souboru App.config klienta tak, aby nastavila odpovídající hlavní název uživatele (UPN) nebo hlavní název služby (SPN) na základě účtu, který se používá ke spuštění služby. Další informace o identitě koncového bodu najdete v tématu Identita služby a ověřování .

    8. Spusťte Client.exe z příkazového řádku.

Vyčištění po ukázce

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