Aracılığıyla paylaş


İleti Güvenliği Örneği

MessageSecurity örneği, basicHttpBinding ve ileti güvenliğini kullanan bir uygulamanın nasıl oluşturulacağını gösterir. Bu örnek, hesap makinesi hizmeti uygulayan Getting Started'a dayanmaktadır.

Uyarı

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

güvenlik modu basicHttpBinding şu değerlere ayarlanabilir: Message, Transport, TransportWithMessageCredentialTransportCredentialOnly ve None. Aşağıdaki örnek hizmet App.config dosyasında, uç nokta tanımı basicHttpBinding ve Binding1 adlı bağlama yapılandırmasına başvurarak, aşağıdaki örnek yapılandırmada gösterilmiştir.

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

Bağlama yapılandırması mode özniteliğini <güvenlik> için ayarlar ve Message özniteliğini clientCredentialType için ayarlar, aşağıdaki örnek yapılandırmada gösterildiği gibi <:

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

Hizmetin istemcide kimliğini doğrulamak için kullandığı sertifika, öğesinin altındaki serviceCredentials yapılandırma dosyasının davranışlar bölümünde ayarlanır. İstemcinin hizmette kimliğini doğrulamak için kullandığı sertifikaya uygulanan doğrulama modu, öğesinin altındaki clientCertificate davranışlar bölümünde de ayarlanır.

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

İstemci yapılandırma dosyasında aynı bağlama ve güvenlik ayrıntıları belirtilir.

Çağıranın kimliği hizmet konsolu penceresinde aşağıdaki kod kullanılarak görüntülenir:

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

Örneği çalıştırdığınızda, işlem istekleri ve yanıtları istemci konsolu penceresinde görüntülenir. İstemciyi kapatmak için istemci penceresinde ENTER tuşuna basın.

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.

Örneği ayarlamak ve derlemek için

  1. Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.

  2. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örneklerioluşturma başlığındaki yönergeleri izleyin.

Örneği aynı makinede çalıştırmak için

  1. Örnek yükleme klasöründen Setup.bat çalıştırın. Bu, örneği çalıştırmak için gereken tüm sertifikaları yükler.

    Uyarı

    Setup.bat toplu iş dosyası bir Windows SDK Komut İsteminden çalıştırılacak şekilde tasarlanmıştır. MSSDK ortam değişkeninin SDK'nın yüklü olduğu dizine işaret etmelerini gerektirir. Bu ortam değişkeni bir Windows SDK Komut İstemi içinde otomatik olarak ayarlanır.

  2. \service\bin konumundan hizmet uygulamasını çalıştırın.

  3. \client\bin konumundan istemci uygulamasını çalıştırın. İstemci etkinliği, istemci konsol uygulamasında görüntülenir.

  4. İstemci ve hizmet iletişim kuramıyorsa bkz. WCF Örnekleri için Sorun Giderme İpuçları.

  5. Örnekle işiniz bittiğinde Cleanup.bat çalıştırarak sertifikaları kaldırın. Diğer güvenlik örnekleri aynı sertifikaları kullanır.

Örnek kodu makineler arasında çalıştırmak için

  1. Hizmet binary dosyaları için hizmet makinesinde bir dizin oluşturun.

  2. Hizmet programı dosyalarını sunucudaki hizmet dizinine kopyalayın. Ayrıca Setup.bat, Cleanup.batve ImportClientCert.bat dosyalarını sunucuya kopyalayın.

  3. İstemci ikili dosyaları için istemci makinesinde bir dizin oluşturun.

  4. İstemci programı dosyalarını istemci makinesindeki istemci dizinine kopyalayın. Ayrıca, Setup.bat, Cleanup.batve ImportServiceCert.bat dosyalarını istemciye kopyalayın.

  5. sunucusunda setup.bat serviceçalıştırın. bağımsız değişkeniyle setup.bat çalıştırmakservice, makinenin tam etki alanı adına sahip bir hizmet sertifikası oluşturur ve hizmet sertifikasını Service.cer adlı bir dosyaya aktarır.

  6. Service.exe.config, makinenin tam etki alanı adıyla aynı olan yeni sertifika adını (findValueserviceCertificate< öğesindeki> öznitelikte) yansıtacak şekilde düzenleyin. Ayrıca, localhost yerine tam makine adı belirtmek için temel adresin değerini değiştirin.

  7. Service.cer dosyasını hizmet dizininden istemci makinesindeki istemci dizinine kopyalayın.

  8. İstemcide setup.bat clientçalıştırın. setup.batclient bağımsız değişkeniyle çalıştırmak, client.com adlı bir istemci sertifikası oluşturarak sertifikayı Client.cer adlı bir dosyaya aktarır.

  9. İstemci makinesindeki Client.exe.config dosyasında, uç noktanın adres değerini hizmetinizin yeni adresiyle eşleşecek şekilde değiştirin. Bunu, localhost'u sunucunun tamamen nitelikli etki alanı adıyla değiştirerek yaparsınız. Ayrıca findValue özniteliğini <defaultCertificate>, sunucunun tam etki alanı adı olan yeni hizmet sertifikası adıyla değiştirin.

  10. Client.cer dosyasını istemci dizininden sunucudaki hizmet dizinine kopyalayın.

  11. İstemcide ImportServiceCert.batçalıştırın. Bu, hizmet sertifikasını Service.cer dosyasından CurrentUser - TrustedPeople deposuna aktarır.

  12. sunucusunda ImportClientCert.batkomutunu çalıştırın. Bu, istemci sertifikasını Client.cer dosyasından LocalMachine - TrustedPeople deposuna aktarır.

  13. Hizmet makinesinde bir komut isteminden Service.exe çalıştırın.

  14. İstemci makinesinde bir komut istemi penceresinden Client.exe başlatın.

    1. İstemci ve hizmet iletişim kuramıyorsa bkz. WCF Örnekleri için Sorun Giderme İpuçları.

Örnekten sonra temizlik yapmak için

  • Örneği çalıştırmayı bitirdikten sonra örnekler klasöründe Cleanup.bat çalıştırın.

    Uyarı

    Bu betik, bu örneği makineler arasında çalıştırırken istemcideki hizmet sertifikalarını kaldırmaz. Makineler arasında sertifika kullanan Windows Communication Foundation (WCF) örnekleri çalıştırdıysanız CurrentUser - TrustedPeople deposuna yüklenmiş hizmet sertifikalarını temizlediğinizden emin olun. Bunu yapmak için aşağıdaki komutu kullanın: Örneğin: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com