Bagikan melalui


Sampel Keamanan Penemuan

Spesifikasi Penemuan tidak mengharuskan titik akhir yang berpartisipasi dalam proses penemuan agar aman. Meningkatkan pesan penemuan dengan keamanan mengurangi berbagai jenis serangan (perubahan pesan, penolakan layanan, pemutaran ulang, spoofing).

Sampel DiscoveryScenario mengimplementasikan saluran kustom yang menghitung dan memverifikasi tanda tangan pesan menggunakan format tanda tangan ringkas (dijelaskan dalam Bagian 8.2 dari spesifikasi WS-Discovery). Sampel mendukung spesifikasi Penemuan 2005 dan versi 1.1.

Saluran kustom diterapkan di atas tumpukan saluran yang ada untuk titik akhir Penemuan dan Pengumuman. Dengan cara ini, header tanda tangan diterapkan untuk setiap pesan yang dikirim. Tanda tangan diverifikasi pada pesan yang diterima dan ketika tidak cocok atau ketika pesan tidak memiliki tanda tangan, pesan akan dihilangkan. Untuk menandatangani dan memverifikasi pesan, sampel menggunakan sertifikat.

Diskusi

WCF dapat diperluas dan memungkinkan pengguna untuk menyesuaikan saluran sesuai keinginan. Sampel mengimplementasikan elemen pengikatan aman penemuan yang membangun saluran aman. Saluran aman berfungsi untuk menerapkan dan memverifikasi tanda tangan pesan, yang diaplikasikan di lapisan atas tumpukan saat ini.

Elemen pengikatan aman membangun pabrik saluran yang aman dan pendengar saluran yang aman.

Pembuat Kanal Aman

Pabrik saluran aman membuat saluran output atau dupleks yang menambahkan tanda tangan yang ringkas pada tajuk pesan. Untuk menjaga pesan sesecil mungkin, format tanda tangan ringkas digunakan. Struktur tanda tangan ringkas diperlihatkan dalam contoh berikut.

<d:Security ... >
  [<d:Sig Scheme="xs:anyURI"
         [KeyId="xs:base64Binary"]?
          Refs="..."
         [PrefixList]="xs:NMTOKENS"
          Sig="xs:base64Binary"
          ... />]?
  ...
</d:Security>

Nota

Ditambahkan PrefixList dalam versi protokol Discovery 2008.

Untuk menghitung tanda tangan, sampel menentukan item tanda tangan yang diperluas. Tanda tangan XML (SignedInfo) dibuat, menggunakan awalan ds namespace, seperti yang diperlukan oleh spesifikasi WS-Discovery. Isi dan semua header dalam namespace penemuan dan alamat direferensikan dalam tanda tangan, sehingga tidak dapat dirusak. Setiap elemen yang direferensikan diubah menggunakan Kanonisisasi Eksklusif (http://www.w3.org/2001/10/xml-exc-c14n#), lalu nilai hash SHA-1 dihitung (http://www.w3.org/2000/09/xmldsig#sha1). Berdasarkan semua elemen yang direferensikan dan nilai hashnya, nilai tanda tangan dihitung menggunakan algoritma RSA (http://www.w3.org/2000/09/xmldsig#rsa-sha1).

Pesan ditandatangani dengan sertifikat yang ditentukan klien. Lokasi penyimpanan, nama, dan nama subjek sertifikat harus ditentukan saat elemen pengikatan dibuat. KeyId dalam tanda tangan ringkas mewakili pengidentifikasi kunci token penandatanganan dan merupakan Pengidentifikasi Kunci Subjek (SKI) dari token penandatanganan atau (jika SKI tidak ada) hash SHA-1 dari kunci publik token penandatanganan.

Pendengar Saluran Aman

Pendengar saluran yang aman membuat saluran input atau dupleks yang memverifikasi tanda tangan ringkas dalam pesan yang diterima. Untuk memverifikasi tanda tangan, tanda tangan ringkas KeyId yang dilampirkan dalam pesan digunakan untuk memilih sertifikat dari penyimpanan yang ditentukan. Jika pesan tidak memiliki tanda tangan atau pemeriksaan tanda tangan gagal, pesan akan dihilangkan. Untuk menggunakan pengikatan aman, contoh ini menentukan sebuah faktori yang membuat elemen khusus UdpDiscoveryEndpoint dan UdpAnnouncementEndpoint dengan elemen tambahan pengikatan aman penemuan. Titik akhir aman ini dapat digunakan dalam pendengar pengumuman penemuan dan layanan yang dapat ditemukan.

Detail Sampel

Sampel mencakup pustaka dan 4 aplikasi konsol:

  • DiscoverySecurityChannels: Perpustakaan yang menyediakan pengikatan aman. Pustaka menghitung dan memverifikasi tanda tangan ringkas untuk pesan keluar/masuk.

  • Layanan: Layanan yang mengekspos kontrak ICalculatorService, dihost sendiri. Layanan ditandai sebagai Dapat Ditemukan. Pengguna menentukan detail sertifikat yang digunakan untuk mengesahkan pesan dengan menentukan lokasi penyimpanan dan namanya serta nama subjek atau pengidentifikasi unik lainnya, dan penyimpanan tempat sertifikat klien berada (sertifikat yang digunakan untuk memeriksa tanda tangan pesan masuk). Berdasarkan detail ini, UdpDiscoveryEndpoint dengan keamanan tambahan dibuat dan digunakan.

  • Klien: Kelas ini mencoba menemukan ICalculatorService dan untuk memanggil metode pada layanan. Sekali lagi, UdpDiscoveryEndpoint dengan fitur keamanan tambahan dibangun dan digunakan untuk menandatangani serta memverifikasi pesan.

  • AnnouncementListener: Layanan yang dihost sendiri yang mendengarkan pengumuman online dan offline dan menggunakan titik akhir pengumuman yang aman.

Nota

Jika Setup.bat dijalankan beberapa kali, manajer sertifikat meminta Anda memilih sertifikat untuk ditambahkan, karena ada sertifikat duplikat. Dalam hal ini, Setup.bat harus dibatalkan dan Cleanup.bat harus dipanggil, karena duplikat telah dibuat. Cleanup.bat juga meminta Anda untuk memilih sertifikat yang akan dihapus. Pilih sertifikat dari daftar dan lanjutkan menjalankan Cleanup.bat hingga tidak ada sertifikat yang tersisa.

Untuk menggunakan sampel ini

  1. Jalankan skrip Setup.bat dari Perintah Pengembang untuk Visual Studio. Sampel menggunakan sertifikat untuk menandatangani dan memverifikasi pesan. Skrip membuat sertifikat menggunakan Makecert.exe lalu menginstalnya menggunakan Certmgr.exe. Skrip harus dijalankan dengan hak istimewa administrator.

  2. Untuk membuat dan menjalankan sampel, buka file Security.sln di Visual Studio dan pilih Bangun Ulang Semua. Perbarui properti solusi untuk memulai beberapa proyek: pilih Mulai untuk semua proyek kecuali DiscoverySecureChannels. Jalankan solusi secara normal.

  3. Setelah Anda selesai dengan sampel, jalankan skrip Cleanup.bat yang menghapus sertifikat yang dibuat untuk sampel ini.