Bagikan melalui


Bekerja dengan SSL di API Web

Beberapa skema autentikasi umum tidak aman melalui HTTP biasa. Secara khusus, autentikasi dasar dan autentikasi formulir mengirim kredensial yang tidak terenkripsi. Agar aman, skema autentikasi ini harus menggunakan SSL. Selain itu, sertifikat klien SSL dapat digunakan untuk mengautentikasi klien.

Mengaktifkan SSL di Server

Untuk menyiapkan SSL di IIS 7 atau yang lebih baru:

  • Membuat atau mendapatkan sertifikat. Untuk pengujian, Anda dapat membuat sertifikat yang ditandatangani sendiri.
  • Tambahkan pengikatan HTTPS.

Untuk detailnya, lihat Cara Menyiapkan SSL di IIS 7.

Untuk pengujian lokal, Anda dapat mengaktifkan SSL di IIS Express dari Visual Studio. Di jendela Properti, atur SSL Diaktifkan ke True. Perhatikan nilaiURL SSL ; gunakan URL ini untuk menguji koneksi HTTPS.

Gambar SSL diaktifkan (true) di properti

Memberlakukan SSL di Pengontrol API Web

Jika Anda memiliki pengikatan HTTPS dan HTTP, klien masih dapat menggunakan HTTP untuk mengakses situs. Anda mungkin mengizinkan beberapa sumber daya tersedia melalui HTTP, sementara sumber daya lain memerlukan SSL. Dalam hal ini, gunakan filter tindakan untuk memerlukan SSL untuk sumber daya yang dilindungi. Kode berikut menunjukkan filter autentikasi API Web yang memeriksa SSL:

public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
        {
            actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
            {
                ReasonPhrase = "HTTPS Required"
            };
        }
        else
        {
            base.OnAuthorization(actionContext);
        }
    }
}

Tambahkan filter ini ke tindakan API Web apa pun yang memerlukan SSL:

public class ValuesController : ApiController
{
    [RequireHttps]
    public HttpResponseMessage Get() { ... }
}

Sertifikat Klien SSL

SSL menyediakan autentikasi dengan menggunakan sertifikat Infrastruktur Kunci Umum. Server harus menyediakan sertifikat yang mengautentikasi server ke klien. Kurang umum bagi klien untuk memberikan sertifikat ke server, tetapi ini adalah salah satu opsi untuk mengautentikasi klien. Untuk menggunakan sertifikat klien dengan SSL, Anda memerlukan cara untuk mendistribusikan sertifikat yang ditandatangani kepada pengguna Anda. Untuk banyak jenis aplikasi, ini tidak akan menjadi pengalaman pengguna yang baik, tetapi di beberapa lingkungan (misalnya, perusahaan) mungkin layak.

Keuntungan Kekurangan
- Kredensial sertifikat lebih kuat daripada nama pengguna/kata sandi. - SSL menyediakan saluran aman lengkap, dengan autentikasi, integritas pesan, dan enkripsi pesan. - Anda harus mendapatkan dan mengelola sertifikat PKI. - Platform klien harus mendukung sertifikat klien SSL.

Untuk mengonfigurasi IIS untuk menerima sertifikat klien, buka Manajer IIS dan lakukan langkah-langkah berikut:

  1. Klik simpul situs dalam tampilan pohon.

  2. Klik dua kali fitur Pengaturan SSL di panel tengah.

  3. Di bawah Sertifikat Klien, pilih salah satu opsi berikut:

    • Terima: IIS akan menerima sertifikat dari klien, tetapi tidak memerlukannya.
    • Memerlukan: Memerlukan sertifikat klien. (Untuk mengaktifkan opsi ini, Anda juga harus memilih "Memerlukan SSL")

Anda juga dapat mengatur opsi ini dalam file ApplicationHost.config:

<system.webServer>
    <security>
        <access sslFlags="Ssl, SslNegotiateCert" />
        <!-- To require a client cert: -->
        <!-- <access sslFlags="Ssl, SslRequireCert" /> -->
    </security>
</system.webServer>

Bendera SslNegotiateCert berarti IIS akan menerima sertifikat dari klien, tetapi tidak memerlukannya (setara dengan opsi "Terima" di Manajer IIS). Untuk memerlukan sertifikat, atur bendera SslRequireCert. Untuk pengujian, Anda juga dapat mengatur opsi ini di IIS Express, di applicationhost lokal. File konfigurasi, terletak di "Documents\IISExpress\config".

Membuat Sertifikat Klien untuk Pengujian

Untuk tujuan pengujian, Anda dapat menggunakan MakeCert.exe untuk membuat sertifikat klien. Pertama, buat otoritas root uji.

makecert.exe -n "CN=Development CA" -r -sv TempCA.pvk TempCA.cer

Makecert akan meminta Anda memasukkan kata sandi untuk kunci privat.

Selanjutnya, tambahkan sertifikat ke penyimpanan "Otoritas Sertifikasi Akar Tepercaya" di server pengujian dengan cara berikut:

  1. Buka MMC.
  2. Di bawahFile , pilih Tambahkan/Hapus Snap-In.
  3. Di bawah Snap-in yang tersedia, pilih Sertifikat, lalu klik Tambahkan.
  4. Pilih Akun Komputer.
  5. Pilih Komputer lokal dan selesaikan panduan.
  6. Di bawah panel navigasi, perluas node "Otoritas Sertifikasi Akar Tepercaya".
  7. Pada menu Tindakan, arahkan ke Semua Tugas, lalu klik Impor untuk memulai Wizard Impor Sertifikat.
  8. Telusuri ke file sertifikat, TempCA.cer.
  9. Klik Buka, lalu klik Berikutnya dan selesaikan panduan. (Anda akan diminta untuk memasukkan kembali kata sandi.)

Sekarang buat sertifikat klien yang ditandatangani oleh sertifikat pertama:

makecert.exe -pe -ss My -sr CurrentUser -a sha1 -sky exchange -n "CN=name" 
     -eku 1.3.6.1.5.5.7.3.2 -sk SignedByCA -ic TempCA.cer -iv TempCA.pvk

Menggunakan Sertifikat Klien di API Web

Di sisi server, Anda bisa mendapatkan sertifikat klien dengan memanggil GetClientCertificate pada pesan permintaan. Metode mengembalikan null jika tidak ada sertifikat klien. Jika tidak, ini mengembalikan instans X509Certificate2. Gunakan objek ini untuk mendapatkan informasi dari sertifikat, seperti penerbit dan subjek. Kemudian Anda dapat menggunakan informasi ini untuk autentikasi dan/atau otorisasi.

X509Certificate2 cert = Request.GetClientCertificate();
string issuer = cert.Issuer;
string subject = cert.Subject;