Bagikan melalui


Sampel Keamanan Pesan

Sampel MessageSecurity menunjukkan cara mengimplementasikan aplikasi yang menggunakan basicHttpBinding dan keamanan pesan. Sampel ini didasarkan pada Memulai yang mengimplementasikan layanan kalkulator.

Nota

Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.

Mode basicHttpBinding keamanan dapat diatur ke nilai berikut: Message, , Transport, TransportWithMessageCredentialTransportCredentialOnly dan None. Dalam file App.config layanan sampel berikut, definisi titik akhir menentukan basicHttpBinding dan mereferensikan konfigurasi pengikatan bernama Binding1, seperti yang ditunjukkan dalam konfigurasi sampel berikut:

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

Konfigurasi pengikatan mengatur mode atribut <keamanan> ke Message dan mengatur clientCredentialType atribut <pesan> ke Certificate seperti yang ditunjukkan dalam konfigurasi sampel berikut:

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

Sertifikat yang digunakan layanan untuk mengautentikasi dirinya ke klien diatur di bagian perilaku file konfigurasi di bawah serviceCredentials elemen . Mode validasi yang berlaku untuk sertifikat yang digunakan klien untuk mengautentikasi dirinya ke layanan juga diatur di bagian perilaku di bawah clientCertificate elemen .

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

Detail pengikatan dan keamanan yang sama ditentukan dalam file konfigurasi klien.

Identitas pemanggil ditampilkan di jendela konsol layanan dengan menggunakan kode berikut:

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

Saat Anda menjalankan sampel, permintaan dan respons operasi ditampilkan di jendela konsol klien. Tekan ENTER di jendela klien untuk mematikan klien.

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.

Untuk menyiapkan dan membangun sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.

Untuk menjalankan sampel pada komputer yang sama

  1. Jalankan Setup.bat dari folder instalasi sampel. Ini menginstal semua sertifikat yang diperlukan untuk menjalankan sampel.

    Nota

    File batch Setup.bat dirancang untuk dijalankan dari Command Prompt Windows SDK. Hal ini mengharuskan variabel lingkungan MSSDK menunjuk ke direktori tempat SDK diinstal. Variabel lingkungan ini secara otomatis diatur dalam Prompt Perintah Windows SDK.

  2. Jalankan aplikasi layanan dari \service\bin.

  3. Jalankan aplikasi klien dari \client\bin. Aktivitas klien ditampilkan pada aplikasi konsol klien.

  4. Jika klien dan layanan tidak dapat berkomunikasi, lihat Tips Pemecahan Masalah untuk Sampel WCF.

  5. Hapus sertifikat dengan menjalankan Cleanup.bat setelah Anda selesai dengan sampel. Sampel keamanan lainnya menggunakan sertifikat yang sama.

Untuk menjalankan contoh kode di berbagai komputer

  1. Buat direktori pada komputer layanan untuk biner layanan.

  2. Salin file program layanan ke direktori layanan pada server. Salin juga file Setup.bat, Cleanup.bat, dan ImportClientCert.bat ke server.

  3. Buat direktori pada komputer klien untuk biner klien.

  4. Salin file program klien ke direktori klien di komputer klien. Salin juga file Setup.bat, Cleanup.bat, dan ImportServiceCert.bat ke klien.

  5. Di server, jalankan setup.bat service. Menjalankan setup.bat dengan argumen service membuat sertifikat layanan dengan nama domain sepenuhnya dari komputer dan mengekspornya ke file bernama Service.cer.

  6. Edit Service.exe.config untuk mencerminkan nama sertifikat baru (dalam findValue atribut dalam <elemen serviceCertificate> ) yang sama dengan nama domain komputer yang sepenuhnya memenuhi syarat. Ubah juga nilai alamat dasar untuk menentukan nama komputer yang sepenuhnya memenuhi syarat alih-alih localhost.

  7. Salin file Service.cer dari direktori layanan ke direktori klien di komputer klien.

  8. Pada klien, jalankan setup.bat client. Menjalankan setup.bat dengan argumen client membuat sertifikat klien bernama client.com dan mengekspor sertifikat klien ke file bernama Client.cer.

  9. Dalam file Client.exe.config pada komputer klien, ubah nilai alamat titik akhir agar sesuai dengan alamat baru layanan Anda. Anda melakukan ini dengan mengganti localhost dengan nama domain server yang sepenuhnya memenuhi syarat. findValue Ubah juga atribut <defaultCertificate> ke nama sertifikat layanan baru yang merupakan nama domain server yang sepenuhnya memenuhi syarat.

  10. Salin file Client.cer dari direktori klien ke direktori layanan di server.

  11. Pada klien, jalankan ImportServiceCert.bat. Ini mengimpor sertifikat layanan dari file Service.cer ke penyimpanan CurrentUser - TrustedPeople.

  12. Di server, jalankan ImportClientCert.bat, Ini mengimpor sertifikat klien dari file Client.cer ke penyimpanan LocalMachine - TrustedPeople.

  13. Pada komputer layanan, jalankan Service.exe dari prompt perintah.

  14. Pada komputer klien, luncurkan Client.exe dari jendela prompt perintah.

    1. Jika klien dan layanan tidak dapat berkomunikasi, lihat Tips Pemecahan Masalah untuk Sampel WCF.

Untuk membersihkan setelah pengujian sampel

  • Jalankan Cleanup.bat di folder sampel setelah Anda selesai menjalankan sampel.

    Nota

    Skrip ini tidak menghapus sertifikat layanan pada klien saat menjalankan sampel ini di seluruh komputer. Jika Anda telah menjalankan sampel Windows Communication Foundation (WCF) yang menggunakan sertifikat di seluruh komputer, pastikan untuk menghapus sertifikat layanan yang telah diinstal di penyimpanan CurrentUser - TrustedPeople. Untuk melakukan ini, gunakan perintah berikut: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Misalnya: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com