Bagikan melalui


Ringkasan Keamanan Transportasi

Mekanisme keamanan transportasi pada Windows Communication Foundation (WCF) bergantung pada pengikatan dan transportasi yang digunakan. Misalnya, ketika menggunakan kelas WSHttpBinding, transportasinya adalah HTTP, dan mekanisme utama untuk mengamankan transportasi tersebut adalah Secure Sockets Layer (SSL) melalui HTTP, yang umumnya disebut HTTPS. Topik ini membahas mekanisme keamanan transportasi utama yang digunakan pada pengikatan yang disediakan sistem WCF.

Catatan

Ketika keamanan SSL digunakan bersama .NET Framework 3.5 dan versi yang lebih baru, klien WCF menggunakan sertifikat perantara di penyimpanan sertifikatnya dan juga sertifikat perantara yang diterima selama negosiasi SSL untuk melakukan validasi rantai sertifikat pada sertifikat layanan. .NET Framework 3.0 hanya menggunakan sertifikat perantara yang telah dipasang pada penyimpanan sertifikat lokal.

Peringatan

Ketika keamanan transportasi digunakan, properti Thread.CurrentPrincipal dapat ditimpa. Untuk mencegah hal ini terjadi, atur ServiceAuthorizationBehavior.PrincipalPermissionMode ke PrincipalPermissionMode.None. ServiceAuthorizationBehavior adalah perilaku layanan yang dapat diatur pada deskripsi layanan.

BasicHttpBinding

Secara default, kelas BasicHttpBinding tidak menyediakan keamanan. Pengikatan ini dirancang untuk interoperabilitas dengan penyedia layanan Web yang tidak menerapkan keamanan. Namun, Anda dapat mengaktifkan keamanan dengan mengatur properti Mode ke nilai apa pun kecuali None. Untuk mengaktifkan keamanan transportasi, atur properti ke Transport.

Interoperasi dengan IIS

Kelas BasicHttpBinding ini terutama digunakan untuk menginteroperasikan dengan layanan Web yang ada, dan kebanyakan dari layanan tersebut di-hosting oleh Layanan Informasi Internet (IIS). Akibatnya, keamanan transportasi untuk pengikatan ini dirancang untuk interoperasi tanpa hambatan dengan situs IIS. Hal ini dilakukan dengan mengatur mode keamanan ke Transport lalu mengatur jenis mandat klien. Nilai jenis mandat sesuai dengan mekanisme keamanan direktori IIS. Kode berikut menunjukkan mode yang diatur dan jenis mandat diatur ke Windows. Anda dapat menggunakan konfigurasi ini ketika klien dan server berada pada domain Windows yang sama.

BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.Transport ;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows

Atau, dalam konfigurasi:

<bindings>  
  <basicHttpBinding>  
    <binding name="SecurityByTransport">  
      <security mode="Transport">  
        <transport clientCredentialType="Windows" />  
       </security>  
     </binding>  
  </basicHttpBinding>  
</bindings>  

Bagian berikut membahas jenis mandat klien lainnya.

Dasar

Hal ini sesuai dengan metode autentikasi Dasar dalam IIS. Saat menggunakan mode ini, server IIS harus dikonfigurasikan dengan akun pengguna Windows dan izin sistem file NTFS yang sesuai. Untuk informasi selengkapnya mengenai IIS 6.0, lihat Mengaktifkan Autentikasi Dasar dan Mengonfigurasi Nama Realm. Untuk informasi selengkapnya mengenai IIS 7.0, lihat Mengonfigurasi Autentikasi Dasar (IIS 7).

Sertifikat

IIS memiliki opsi yang menyaratkan klien untuk masuk dengan sertifikat. Fitur ini juga memungkinkan IIS memetakan sertifikat klien ke akun Windows. Untuk informasi selengkapnya tentang IIS 6.0, lihat Mengaktifkan Sertifikat Klien dalam IIS 6.0. Untuk informasi selengkapnya tentang IIS 7.0, lihat Mengonfigurasi Sertifikat Server dalam IIS 7.

digest

Autentikasi digest serupa dengan Otentikasi dasar, tetapi menawarkan keuntungan mengirimkan mandat sebagai hash, daripada dalam teks yang bersih. Untuk informasi selengkapnya tentang IIS 6.0, lihat Autentikasi Digest pada IIS 6.0. Untuk informasi selengkapnya tentang IIS 7.0, lihat Mengonfigurasi Autentikasi Digest (IIS 7).

Windows

Hal ini sesuai untuk NTLM yang terintegrasi dalam IIS. Ketika diatur ke nilai ini, server juga diharapkan berada pada domain Windows yang menggunakan protokol Kerberos sebagai pengendali domainnya. Jika server tidak berada pada domain yang didukung Kerberos, atau jika sistem Kerberos gagal, Anda dapat menggunakan nilai NT LAN Manager (NTLM) yang dijelaskan di bagian berikutnya. Untuk informasi selengkapnya tentang IIS 6.0, lihat NTLM dalam IIS 6.0. Untuk informasi selengkapnya tentang IIS 7.0, lihat Mengonfigurasi Sertifikat Server dalam IIS 7.

NTLM

Hal ini memungkinkan server menggunakan NTLM untuk autentikasi jika protokol Kerberos gagal. Untuk informasi selengkapnya tentang mengonfigurasi IIS dalam IIS 6.0, lihat Mendorong Autentikasi NTLM. Untuk IIS 7.0, NTLM mencakup autentikasi NTLM. Untuk informasi selengkapnya, lihat Mengonfigurasi Sertifikat Server dalam IIS 7.

WsHttpBinding

Kelas WSHttpBinding ini dirancang untuk interoperasi dengan layanan yang menerapkan spesifikasi WS-*. Keamanan transportasi untuk pengikatan ini adalah Secure Sockets Layer (SSL) melalui HTTP, atau HTTPS. Untuk membuat aplikasi WCF yang menggunakan SSL, gunakan IIS untuk hosting aplikasi. Sebagai alternatif, jika Anda membuat aplikasi yang di-hosting sendiri, gunakan alat HttpCfg.exe untuk mengikat sertifikat X.509 ke port tertentu pada komputer. Nomor port ditentukan sebagai bagian dari aplikasi WCF sebagai alamat titik akhir. Saat menggunakan mode transportasi, alamat titik akhir harus menyertakan protokol HTTPS atau pengecualian akan ditampilkan pada durasi. Untuk informasi lebih lanjut, lihat Keamanan Transportasi HTTP.

Untuk autentikasi klien, atur properti ClientCredentialType dari kelas HttpTransportSecurity ke salah satu nilai enumerasi HttpClientCredentialType. Nilai enumerasi identik dengan jenis mandat klien untuk BasicHttpBinding dan dirancang untuk di-hosting dengan layanan IIS.

Contoh berikut menunjukkan pengikatan yang digunakan dengan jenis mandat klien Windows.

// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
' The code uses a shortcut to specify the security mode to Transport.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows

WSDualHttpBinding

Pengikatan ini hanya menyediakan keamanan tingkat pesan, bukan keamanan tingkat transportasi.

NetTcpBinding

Kelas NetTcpBinding menggunakan TCP untuk transportasi pesan. Keamanan untuk mode transportasi disediakan dengan menerapkan Keamanan Lapisan Transportasi (TLS) melalui TCP. Implementasi TLS disediakan oleh sistem operasi.

Anda juga dapat menentukan jenis mandat klien dengan mengatur properti ClientCredentialType dari kelas TcpTransportSecurity ke salah satu nilai TcpClientCredentialType, seperti yang ditunjukkan dalam kode berikut.

NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate

Klien

Pada klien, Anda harus menentukan sertifikat menggunakan metode SetCertificate dari kelas X509CertificateInitiatorClientCredential.

Catatan

Jika Anda menggunakan keamanan Windows, sertifikat tidak diperlukan.

Kode berikut menggunakan thumbprint dari sertifikat, yang mengidentifikasi secara unik. Untuk informasi selengkapnya mengenai sertifikat, lihat Bekerja dengan Sertifikat.

NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
EndpointAddress a = new EndpointAddress("net.tcp://contoso.com/TcpAddress");
ChannelFactory<ICalculator> cf = new ChannelFactory<ICalculator>(b, a);
cf.Credentials.ClientCertificate.SetCertificate(
    StoreLocation.LocalMachine,
    StoreName.My,
    X509FindType.FindByThumbprint,
    "0000000000000000000000000000000000000000");
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Dim a As New EndpointAddress("net.tcp://contoso.com/TcpAddress")
Dim cf As ChannelFactory(Of ICalculator) = New ChannelFactory(Of ICalculator)(b, a)
cf.Credentials.ClientCertificate.SetCertificate( _
    StoreLocation.LocalMachine, _
    StoreName.My, _
    X509FindType.FindByThumbprint, _
    "0000000000000000000000000000000000000000")

Sebagai alternatif, tentukan sertifikat dalam konfigurasi klien menggunakan elemen <clientCredentials> dalam bagian perilaku.

<behaviors>  
  <behavior>  
   <clientCredentials>  
     <clientCertificate findValue= "101010101010101010101010101010000000000"
      storeLocation="LocalMachine" storeName="My"
      X509FindType="FindByThumbPrint">  
     </clientCertificate>  
   </clientCredentials>  
 </behavior>  
</behaviors>

NetNamedPipeBinding

Kelas NetNamedPipeBinding ini dirancang untuk komunikasi intra-komputer yang efisien; yaitu, untuk proses yang berjalan pada komputer yang sama, meskipun saluran pipa yang dinamai dapat dibuat antara dua komputer pada jaringan yang sama. Pengikatan ini hanya menyediakan keamanan tingkat transportasi. Ketika membuat aplikasi menggunakan pengikatan ini, alamat titik akhir harus menyertakan "net.pipe" sebagai protokol alamat titik akhir.

WSFederationHttpBinding

Ketika menggunakan keamanan transportasi, pengikatan ini menggunakan SSL melalui HTTP, yang dikenal sebagai HTTPS dengan token yang diterbitkan (TransportWithMessageCredential). Untuk informasi selengkapnya mengenai aplikasi federasi, lihat Federasi dan Token yang Diterbitkan.

NetPeerTcpBinding

Kelas NetPeerTcpBinding ini adalah transportasi aman yang dirancang untuk komunikasi yang efisien menggunakan fitur jaringan rekan-ke-rekan. Seperti yang ditunjukkan dari nama kelas dan pengikatan, TCP adalah protokol. Ketika mode keamanan diatur ke Transportasi, pengikatan menerapkan TLS di atas TCP. Untuk informasi selengkapnya tentang fitur rekan-ke-rekan, lihat Jaringan Rekan-ke-Rekan.

MsmqIntegrationBinding dan NetMsmqBinding

Untuk pembahasan lengkap tentang keamanan transportasi dengan Message Queuing (sebelumnya disebut MSMQ), lihat Mengamankan Pesan Menggunakan Keamanan Transportasi.

Lihat juga