Bagikan melalui


Keamanan Transportasi HTTP

Saat menggunakan HTTP sebagai transportasi, keamanan disediakan oleh implementasi Lapisan Soket Aman (SSL). SSL digunakan secara luas di Internet untuk mengautentikasi layanan kepada klien, lalu untuk memberikan kerahasiaan (enkripsi) pada saluran. Artikel ini menjelaskan cara kerja SSL dan cara kerjanya diimplementasikan di Windows Communication Foundation (WCF).

SSL Dasar

Cara kerja SSL paling baik dijelaskan melalui skenario umum, dalam hal ini, situs web bank. Situs ini memungkinkan pelanggan masuk dengan nama pengguna dan kata sandi. Setelah diautentikasi, pengguna dapat melakukan transaksi, seperti melihat saldo akun, membayar tagihan, dan memindahkan uang dari satu akun ke akun lainnya.

Ketika pengguna pertama kali mengunjungi situs, mekanisme SSL memulai serangkaian negosiasi, yang disebut jabat tangan, dengan klien pengguna (dalam hal ini, browser web). SSL terlebih dahulu mengautentikasi situs bank ke pelanggan. Hal ini merupakan langkah yang penting karena pelanggan harus terlebih dahulu mengetahui bahwa mereka berkomunikasi dengan situs yang sebenarnya, bukan spoof yang mencoba mengelabui mereka untuk mengetikkan nama pengguna dan kata sandi mereka. SSL melakukan autentikasi ini dengan menggunakan sertifikat SSL yang disediakan oleh otoritas tepercaya, seperti VeriSign. Logikanya seperti ini: VeriSign menjamin identitas situs bank. Karena browser mempercayai VeriSign, situs tepercaya. Jika ingin memeriksa dengan VeriSign, Anda dapat melakukannya juga dengan mengklik logo VeriSign. Tindakan ini menyajikan pernyataan keaslian beserta tanggal kedaluwarsa dan kepada siapa pernyataan tersebut dikeluarkan (situs bank).

Untuk memulai sesi yang aman, klien mengirimkan "halo" yang setara ke server beserta daftar algoritma kriptografi yang dapat digunakan untuk menandatangani, menghasilkan hash, serta mengenkripsi dan mendekripsi. Untuk menanggapinya, situs ini mengirimkan kembali konfirmasi dan pilihannya dari salah satu rangkaian algoritma. Selama proses handshake awal ini, kedua belah pihak mengirim dan menerima nonce. Nonce adalah bagian data yang dihasilkan secara acak yang digunakan, dengan kombinasi kunci publik situs, untuk membuat hash. Hash adalah angka baru yang berasal dari dua angka menggunakan algoritma standar, seperti SHA1. (Klien dan situs juga bertukar pesan untuk menyetujui algoritma hash mana yang akan digunakan.) Hash bersifat unik dan hanya digunakan untuk sesi antara klien dan situs guna mengenkripsi dan mendekripsi pesan. Klien dan layanan memiliki nonce dan kunci publik sertifikat asli, sehingga kedua belah pihak dapat menghasilkan hash yang sama. Oleh karena itu, klien memvalidasi hash yang dikirim oleh layanan dengan (a) menggunakan algoritma yang disepakati untuk menghitung hash dari data, dan (b) membandingkannya dengan hash yang dikirim oleh layanan; jika keduanya cocok, maka klien memiliki jaminan bahwa hash belum diubah. Klien kemudian dapat menggunakan hash ini sebagai kunci untuk mengenkripsi pesan yang berisi hash baru lainnya. Layanan ini dapat mendekripsi pesan menggunakan hash, dan memulihkan hash hampir final ini. Informasi yang terkumpul (nonce, kunci publik, dan data lainnya) sekarang diketahui oleh kedua belah pihak, dan hash akhir (atau kunci master) dapat dibuat. Kunci akhir ini dikirim terenkripsi menggunakan hash hampir final. Kunci master kemudian digunakan untuk mengenkripsi dan mendekripsi pesan sepanjang sesi. Karena klien dan layanan menggunakan kunci yang sama, hal ini juga disebut kunci sesi.

Kunci sesi juga ditandai sebagai kunci konten, atau "rahasia bersama". Memiliki kunci konten penting karena mengurangi komputasi yang diperlukan oleh kedua sisi transaksi. Jika setiap pesan menuntut pertukaran nonce dan hash baru, performa akan memburuk. Oleh karena itu, tujuan utama SSL adalah untuk menggunakan kunci simetris yang memungkinkan pesan mengalir bebas antara kedua belah pihak dengan tingkat keamanan dan efisiensi yang lebih besar.

Deskripsi sebelumnya adalah versi sederhana dari proses yang terjadi, karena protokol dapat bervariasi dari situs ke situs. Ada juga kemungkinan bahwa klien dan situs menghasilkan nonce yang secara algoritmik digabungkan selama proses handshake guna memberikan lebih banyak kompleksitas, begitu juga perlindungan, pada proses pertukaran data.

Infrastruktur Kunci Umum dan Sertifikat

Selama proses handshake, layanan juga mengirimkan sertifikat SSL-nya ke klien. Sertifikat berisi informasi, seperti tanggal kedaluwarsa, otoritas penerbit, dan Pengidentifikasi Sumber Daya Seragam (URI) situs. Klien membandingkan URI dengan URI yang dihubungi di awal untuk memastikan kecocokan, serta memeriksa tanggal dan otoritas penerbitan.

Setiap sertifikat memiliki dua kunci, kunci privat dan kunci umum. Keduanya kunci ini dikenal sebagai pasangan kunci pertukaran. Singkatnya, kunci privat hanya diketahui oleh pemilik sertifikat, sementara kunci umum dapat dibaca dari sertifikat. Kedua kunci dapat digunakan untuk mengenkripsi atau mendekripsi digest, hash, atau kunci lainnya, tetapi hanya sebagai operasi yang berlawanan. Misalnya, jika klien mengenkripsi dengan kunci publik, hanya situs yang dapat mendekripsi pesan menggunakan kunci privat. Demikian pula, jika situs mengenkripsi dengan kunci privat, klien dapat mendekripsi dengan kunci umum. Hal ini memberikan jaminan kepada klien bahwa pesan hanya dipertukarkan dengan pemilik kunci privat karena hanya pesan yang dienkripsi dengan kunci privat yang dapat didekripsi dengan kunci umum. Situs dapat yakin bahwa pertukaran pesan dilakukan dengan klien yang mengenkripsi menggunakan kunci umum. Pertukaran ini aman hanya untuk proses handshake awal. Hal ini juga menjadi alasan mengapa pembuatan kunci simetris yang sebenarnya memerlukan banyak proses. Namun demikian, semua komunikasi bergantung pada layanan yang memiliki sertifikat SSL yang valid.

Menerapkan SSL dengan WCF

Keamanan transportasi HTTP (atau SSL) disediakan secara eksternal untuk WCF. Anda dapat menerapkan SSL dengan salah satu dari dua cara; faktor penentunya adalah cara aplikasi Anda dihosting:

  • Jika Anda menggunakan Layanan Informasi Internet (IIS) sebagai host WCF Anda, gunakan infrastruktur IIS untuk menyiapkan layanan SSL.

  • Jika Anda membuat aplikasi WCF yang dihosting sendiri, Anda dapat mengikat sertifikat SSL ke alamat menggunakan alat HttpCfg.exe.

Menggunakan IIS untuk Keamanan Transportasi

IIS 7.0

Untuk menyiapkan IIS 7.0 sebagai host aman (menggunakan SSL), lihat Mengonfigurasi SSL di IIS 7.0.

Untuk mengonfigurasi sertifikat untuk digunakan dengan IIS 7.0, lihat Mengonfigurasi Sertifikat Server di IIS 7.0.

IIS 6.0

Untuk menyiapkan IIS 6.0 sebagai host aman (menggunakan SSL), lihat Mengonfigurasi SSL.

Untuk mengonfigurasi sertifikat agar digunakan dengan IIS 6.0, lihat Certificates_IIS_SP1_Ops.

Menggunakan HttpCfg untuk SSL

Jika Anda membuat aplikasi WCF yang dihost sendiri, gunakan alat HttpCfg.exe.

Untuk mengetahui informasi selengkapnya tentang penggunaan alat HttpCfg.exe untuk menyiapkan port dengan sertifikat X.509, lihat Petunjuk: Mengonfigurasi Port dengan Sertifikat SSL.

Lihat juga