Bagikan melalui


Keamanan Transportasi dengan Autentikasi Sertifikat

Artikel ini membahas penggunaan sertifikat X.509 untuk autentikasi server dan klien saat menggunakan keamanan transportasi. Untuk informasi selengkapnya tentang sertifikat X.509, lihat Sertifikat Kunci Publik X.509. Sertifikat harus dikeluarkan oleh otoritas sertifikasi, yang sering kali menjadi pengeluar sertifikat pihak ketiga. Di domain Windows Server, Layanan Sertifikat Direktori Aktif dapat digunakan untuk menerbitkan sertifikat ke komputer klien di domain. Dalam skenario ini, layanan dihosting di bawah Layanan informasi Internet (IIS) yang dikonfigurasi dengan Secure Sockets Layer (SSL). Layanan dikonfigurasi dengan sertifikat SSL (X.509) untuk memungkinkan klien memverifikasi identitas server. Klien juga dikonfigurasi dengan sertifikat X.509 yang memungkinkan layanan untuk memverifikasi identitas klien. Sertifikat server harus dipercaya oleh klien dan sertifikat klien harus dipercaya oleh server. Mekanisme sebenarnya tentang bagaimana layanan dan klien memverifikasi identitas masing-masing berada di luar cakupan artikel ini. Untuk informasi selengkapnya, lihat Tanda Tangan Digital di Wikipedia.

Skenario ini menerapkan pola pesan permintaan/balasan seperti yang diilustrasikan oleh diagram berikut.

Secure transfer using certificates

Untuk informasi selengkapnya tentang menggunakan sertifikat dengan layanan, lihat Bekerja dengan Sertifikat dan Cara: Mengonfigurasi Port dengan Sertifikat SSL. Tabel berikut menjelaskan berbagai karakteristik skenario.

Karakteristik Deskripsi
Mode Keamanan Transportasi
Interoperabilitas Dengan klien layanan Web dan layanan yang ada.
Autentikasi (Server)

Autentikasi (Klien)
Ya (menggunakan sertifikat SSL)

Ya (menggunakan sertifikat X.509)
Integritas data Ya
Kerahasiaan Data Ya
Transportasi HTTPS
Pengikatan WSHttpBinding

Mengonfigurasi Layanan

Karena layanan dalam skenario ini dihosting di bawah IIS, layanan dikonfigurasi dengan file web.config. Web.config berikut menunjukkan cara mengonfigurasi WSHttpBinding untuk menggunakan keamanan transportasi dan kredensial klien X.509.

<configuration>  
  <system.serviceModel>  
    <protocolMapping>  
      <add scheme="https" binding="wsHttpBinding" />  
    </protocolMapping>  
    <bindings>  
      <wsHttpBinding>  
        <!-- configure wsHttp binding with Transport security mode and clientCredentialType as Certificate -->  
        <binding>  
          <security mode="Transport">  
            <transport clientCredentialType="Certificate"/>
          </security>  
        </binding>  
      </wsHttpBinding>  
    </bindings>  
    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->  
    <behaviors>  
      <serviceBehaviors>  
        <behavior>
           <serviceDebug includeExceptionDetailInFaults="True" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

Mengonfigurasi Klien

Klien dapat dikonfigurasi dalam kode atau dalam file app.config. Contoh berikut menunjukkan cara mengonfigurasi klien dalam kode.

// Create the binding.  
var myBinding = new WSHttpBinding();  
myBinding.Security.Mode = SecurityMode.Transport;  
myBinding.Security.Transport.ClientCredentialType =  
   HttpClientCredentialType.Certificate;  
  
// Create the endpoint address. Note that the machine name
// must match the subject or DNS field of the X.509 certificate  
// used to authenticate the service.
var ea = new  
   EndpointAddress("https://localhost/CalculatorService/service.svc");  
  
// Create the client. The code for the calculator
// client is not shown here. See the sample applications  
// for examples of the calculator code.  
var cc =  
   new CalculatorClient(myBinding, ea);  
  
// The client must specify a certificate trusted by the server.  
cc.ClientCredentials.ClientCertificate.SetCertificate(  
    StoreLocation.CurrentUser,  
    StoreName.My,  
    X509FindType.FindBySubjectName,  
    "contoso.com");  
  
// Begin using the client.  
Console.WriteLine(cc.Add(100, 1111));  
//...  
cc.Close();  

Atau Anda dapat mengonfigurasi klien dalam file App.config seperti yang ditunjukkan pada contoh berikut:

<configuration>  
  <system.serviceModel>  
    <client>  
      <!-- this endpoint has an https: address -->  
      <endpoint address=" https://localhost/CalculatorService/service.svc "
                behaviorConfiguration="endpointCredentialBehavior"  
                binding="wsHttpBinding"
                bindingConfiguration="Binding1"
                contract="Microsoft.Samples.TransportSecurity.ICalculator"/>  
    </client>  
    <behaviors>  
      <endpointBehaviors>  
        <behavior name="endpointCredentialBehavior">  
          <clientCredentials>  
            <clientCertificate findValue="contoso.com"  
                               storeLocation="CurrentUser"  
                               storeName="My"  
                               x509FindType="FindBySubjectName" />  
          </clientCredentials>  
        </behavior>  
      </endpointBehaviors>  
    </behaviors>  
    <bindings>  
      <wsHttpBinding>  
        <!-- configure wsHttpbinding with Transport security mode  
                   and clientCredentialType as Certificate -->  
        <binding name="Binding1">  
          <security mode="Transport">  
            <transport clientCredentialType="Certificate"/>  
          </security>  
        </binding>  
      </wsHttpBinding>  
    </bindings>  
  </system.serviceModel>  
  
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>  

Lihat juga