Udostępnij przez


Przykład zabezpieczeń komunikatów

W przykładzie MessageSecurity pokazano, jak zaimplementować aplikację korzystającą z zabezpieczeń komunikatów basicHttpBinding i . Ten przykład jest oparty na Rozpoczęcie, które implementuje usługę kalkulatora.

Uwaga / Notatka

Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.

Tryb basicHttpBinding zabezpieczeń można ustawić na następujące wartości: Message, Transport, TransportWithMessageCredential, TransportCredentialOnly i None. W następującym przykładowym pliku usługi App.config definicja punktu końcowego określa basicHttpBinding i odwołuje się do konfiguracji powiązania o nazwie Binding1, jak pokazano w następującej przykładowej konfiguracji:

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

Konfiguracja powiązania ustawia mode atrybut zabezpieczeń<> na Message i ustawia clientCredentialType atrybut <komunikatu> naCertificate, jak pokazano w następującej przykładowej konfiguracji:

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

Certyfikat używany przez usługę do uwierzytelniania się klientowi jest ustawiany w sekcji zachowań pliku konfiguracyjnego w elemencie serviceCredentials. Tryb weryfikacji stosowany do certyfikatu używanego przez klienta do uwierzytelniania się w usłudze jest również ustawiany w sekcji zachowania w obszarze elementu 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>

Te same szczegóły powiązania i zabezpieczeń są określone w pliku konfiguracji klienta.

Tożsamość obiektu wywołującego jest wyświetlana w oknie konsoli usługi przy użyciu następującego kodu:

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

Po uruchomieniu przykładu żądania operacji i odpowiedzi są wyświetlane w oknie konsoli klienta. Naciśnij ENTER w oknie klienta, aby zamknąć 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.

Aby skonfigurować i skompilować przykład

  1. Upewnij się, że wykonano procedurę instalacji One-Time dla przykładów programu Windows Communication Foundation.

  2. Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w Kompilowanie przykładów Windows Communication Foundation.

Aby uruchomić przykład na tej samej maszynie

  1. Uruchom Setup.bat z folderu instalacji przykładowej. To instaluje wszystkie certyfikaty wymagane do uruchomienia próbki.

    Uwaga / Notatka

    Plik wsadowy Setup.bat jest przeznaczony do uruchamiania z wiersza polecenia zestawu Windows SDK. Wymaga to, aby zmienna środowiskowa MSSDK wskazywała katalog, w którym zainstalowano zestaw SDK. Ta zmienna środowiskowa jest automatycznie ustawiana w wierszu polecenia zestawu Windows SDK.

  2. Uruchom aplikację usługi z \service\bin.

  3. Uruchom aplikację klienckę z folderu \client\bin. Działanie klienta jest wyświetlane w aplikacji konsolowej klienta.

  4. Jeśli klient i usługa nie mogą się komunikować, sprawdź sekcję „Wskazówki dotyczące rozwiązywania problemów z przykładami programu WCF”.

  5. Usuń certyfikaty, uruchamiając Cleanup.bat, gdy zakończysz pracę z próbką. Inne przykłady zabezpieczeń używają tych samych certyfikatów.

Aby uruchomić program próbny na różnych maszynach

  1. Utwórz katalog na maszynie obsługującej dla plików binarnych.

  2. Skopiuj pliki programu usługi do katalogu usługi na serwerze. Skopiuj również pliki Setup.bat, Cleanup.bati ImportClientCert.bat na serwer.

  3. Utwórz katalog na maszynie klienckiej dla plików binarnych klienta.

  4. Skopiuj pliki programu klienckiego do katalogu klienta na komputerze klienckim. Skopiuj również pliki Setup.bat, Cleanup.bati ImportServiceCert.bat do klienta.

  5. Na serwerze uruchom polecenie setup.bat service. Uruchomienie setup.bat z argumentem service powoduje utworzenie certyfikatu usługi z w pełni kwalifikowaną nazwą domeny maszyny i eksportuje certyfikat usługi do pliku o nazwie Service.cer.

  6. Edytuj Service.exe.config, aby odzwierciedlić nową nazwę certyfikatu (w atrybucie findValue w elemencie <serviceCertificate>), która jest taka sama jak w pełni kwalifikowana nazwa domeny maszyny. Zmień również wartość adresu podstawowego, aby określić w pełni kwalifikowaną nazwę maszyny zamiast hosta lokalnego.

  7. Skopiuj plik Service.cer z katalogu usługi do katalogu klienta na komputerze klienckim.

  8. Na kliencie uruchom setup.bat client. Uruchomienie setup.bat z argumentem client tworzy certyfikat klienta o nazwie client.com i eksportuje certyfikat klienta do pliku o nazwie Client.cer.

  9. W pliku Client.exe.config na komputerze klienckim zmień wartość adresu punktu końcowego, aby odpowiadała nowemu adresowi usługi. Aby to zrobić, zastąp "localhost" w pełni kwalifikowaną nazwą domeny serwera. findValue Zmień również atrybut defaultCertificate<> na nową nazwę certyfikatu usługi, która jest w pełni kwalifikowaną nazwą domeny serwera.

  10. Skopiuj plik Client.cer z katalogu klienta do katalogu usługi na serwerze.

  11. Na kliencie uruchom polecenie ImportServiceCert.bat. Spowoduje to zaimportowanie certyfikatu usługi z pliku Service.cer do magazynu CurrentUser - TrustedPeople.

  12. Na serwerze uruchom polecenie ImportClientCert.bat. Spowoduje to zaimportowanie certyfikatu klienta z pliku Client.cer do magazynu LocalMachine — TrustedPeople.

  13. Na serwerze uruchom Service.exe w wierszu poleceń.

  14. Na komputerze klienckim uruchom Client.exe w oknie wiersza polecenia.

    1. Jeśli klient i usługa nie mogą się komunikować, sprawdź sekcję „Wskazówki dotyczące rozwiązywania problemów z przykładami programu WCF”.

Aby posprzątać po próbie

  • Uruchom Cleanup.bat w folderze próbek po zakończeniu uruchamiania próbki.

    Uwaga / Notatka

    Ten skrypt nie usuwa certyfikatów usługi na kliencie podczas uruchamiania tego przykładu na maszynach. Jeśli uruchomiłeś przykłady programu Windows Communication Foundation (WCF), które korzystają z certyfikatów na wielu komputerach, pamiętaj, aby wyczyścić certyfikaty usługi zainstalowane w magazynie CurrentUser - TrustedPeople. W tym celu użyj następującego polecenia: Na przykład: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com