Bekerja dengan sertifikat

Untuk memprogram keamanan Windows Communication Foundation (WCF), sertifikat digital X.509 biasanya digunakan untuk mengautentikasi klien dan server, mengenkripsi, serta menandatangani pesan secara digital. Topik ini menjelaskan secara singkat fitur sertifikat digital X.509 dan cara menggunakannya di WCF, dan menyertakan tautan ke topik yang menjelaskan konsep ini lebih lanjut atau yang menunjukkan cara menyelesaikan tugas umum menggunakan WCF dan sertifikat.

Singkatnya, sertifikat digital adalah bagian dari infrastruktur kunci umum (PKI), yaitu sistem sertifikat digital, otoritas sertifikat, dan otoritas pendaftaran lainnya yang memverifikasi dan mengautentikasi validitas setiap pihak yang terlibat dalam transaksi elektronik melalui penggunaan kriptografi kunci umum. Otoritas sertifikasi mengeluarkan sertifikat dan setiap sertifikat memiliki sekumpulan bidang yang berisi data, seperti subjek (entitas tempat sertifikat diterbitkan), tanggal validitas (ketika sertifikat valid), pengeluar sertifikat (entitas yang menerbitkan sertifikat), dan kunci publik. Dalam WCF, setiap properti ini diproses sebagai Claim, dan setiap klaim dibagi lebih lanjut menjadi dua jenis: identitas dan hak. Untuk informasi selengkapnya tentang sertifikat X.509, lihat Sertifikat Kunci Publik X.509. Untuk informasi selengkapnya tentang Klaim dan Otorisasi dalam WCF, lihat Mengelola Klaim dan Otorisasi dengan Model Identitas. Untuk informasi selengkapnya tentang mengimplementasikan PKI, lihat Enterprise PKI dengan Windows Server 2012 R2 Active Directory Certificate Services.

Fungsi utama sertifikat adalah untuk mengautentikasi identitas pemilik sertifikat kepada orang lain. Sertifikat berisi kunci publik pemilik, sementara pemilik mempertahankan kunci privat. Kunci publik dapat digunakan untuk mengenkripsi pesan yang dikirim ke pemilik sertifikat. Hanya pemilik yang memiliki akses ke kunci privat, jadi hanya pemilik yang dapat mendekripsi pesan tersebut.

Sertifikat harus dikeluarkan oleh otoritas sertifikasi, yang sering kali menjadi pengeluar sertifikat pihak ketiga. Di domain Windows, otoritas sertifikasi disertakan yang dapat digunakan untuk mengeluarkan sertifikat ke komputer pada domain.

Lihat sertifikat

Untuk menggunakan sertifikat, Anda harus sering melihatnya dan memeriksa propertinya. Hal ini mudah dilakukan dengan alat snap-in Microsoft Management Console (MMC). Untuk informasi selengkapnya, lihat Cara: Melihat Sertifikat dengan Snap-in MMC.

Penyimpanan sertifikat

Sertifikat ditemukan di penyimpanan. Ada dua lokasi penyimpanan utama yang dibagi lagi menjadi sub-penyimpanan. Jika Anda adalah administrator di komputer, Anda dapat melihat penyimpanan utama dengan menggunakan alat snap-in MMC. Non-administrator hanya dapat melihat penyimpanan pengguna saat ini.

  • Penyimpanan komputer lokal. Penyimpanan ini berisi sertifikat yang diakses oleh proses mesin, seperti ASP.NET. Gunakan lokasi ini untuk menyimpan sertifikat yang mengautentikasi server kepada klien.

  • Penyimpanan pengguna saat ini. Aplikasi interaktif biasanya menempatkan sertifikat di sini untuk pengguna komputer saat ini. Jika Anda membuat aplikasi klien, di sinilah Anda biasanya menempatkan sertifikat yang mengautentikasi pengguna ke layanan.

Kedua penyimpanan ini dibagi lagi menjadi sub-penyimpanan. Yang paling penting dari penyimpanan ini saat pemrograman dengan WCF meliputi:

  • Otoritas Sertifikasi Akar Tepercaya. Anda dapat menggunakan sertifikat di penyimpanan ini untuk membuat rangkaian sertifikat, yang dapat ditelusuri kembali ke sertifikat otoritas sertifikasi di penyimpanan ini.

    Penting

    Komputer lokal secara implisit memercayai sertifikat apa pun yang ditempatkan di penyimpanan ini, bahkan jika sertifikat tidak berasal dari otoritas sertifikasi pihak ketiga tepercaya. Karena alasan ini, jangan masukkan sertifikat apa pun ke penyimpanan ini kecuali Anda sepenuhnya memercayai pengeluar sertifikat dan memahami konsekuensinya.

  • Pribadi. Toko ini digunakan untuk sertifikat yang terkait dengan pengguna komputer. Biasanya, penyimpanan ini digunakan untuk sertifikat yang dikeluarkan oleh salah satu sertifikat otoritas sertifikasi yang ditemukan di penyimpanan Otoritas Sertifikasi Akar Tepercaya. Atau, sertifikat yang ditemukan di sini dapat dikeluarkan sendiri dan dipercaya oleh aplikasi.

Untuk informasi selengkapnya tentang penyimpanan, lihat Penyimpanan Sertifikat.

Pilih penyimpanan

Memilih tempat menyimpan sertifikat bergantung pada bagaimana dan kapan layanan atau klien berjalan. Aturan berikut akan berlaku:

  • Jika layanan WCF dihosting dalam layanan Windows, gunakan penyimpanan komputer lokal. Perhatikan bahwa hak istimewa administrator diperlukan untuk menginstal sertifikat ke penyimpanan komputer lokal.

  • Jika layanan atau klien adalah aplikasi yang berjalan di bawah akun pengguna, gunakan penyimpanan pengguna saat ini.

Mengakses penyimpanan

Penyimpanan dilindungi oleh daftar kontrol akses (ACL), seperti folder di komputer. Saat membuat layanan yang dihosting oleh Layanan Informasi Internet (IIS), proses ASP.NET berjalan dalam akun ASP.NET. Akun tersebut harus memiliki akses ke penyimpanan yang berisi sertifikat yang digunakan layanan. Setiap penyimpanan besar dilindungi dengan daftar akses default, tetapi daftar tersebut dapat diubah. Jika membuat peran terpisah untuk mengakses penyimpanan, Anda harus memberikan izin akses peran tersebut. Untuk mempelajari cara mengubah daftar akses menggunakan alat WinHttpCertConfig.exe, lihat Cara: Membuat Sertifikat Sementara untuk Digunakan Selama Pengembangan.

Kepercayaan rantai dan otoritas sertifikat

Sertifikat dibuat dalam hierarki di mana setiap sertifikat tertentu ditautkan ke CA yang mengeluarkan sertifikat. Tautan ini mengarah ke sertifikat CA. Lalu, sertifikat CA ditautkan ke CA yang mengeluarkan sertifikat CA asli. Proses ini diulang hingga sertifikat CA Akar tercapai. Sertifikat CA Akar sangat tepercaya.

Sertifikat digital digunakan untuk mengautentikasi entitas dengan mengandalkan hierarki, juga disebut rantai kepercayaan. Anda dapat melihat rantai sertifikat menggunakan snap-in MMC dengan mengklik dua kali sertifikat apa pun, lalu mengklik tab Jalur Sertifikat. Untuk informasi selengkapnya tentang mengimpor rantai sertifikat untuk otoritas Sertifikat, lihat Cara: Menentukan Otoritas Sertifikat yang Digunakan Rantai Sertifikat untuk Memverifikasi Tanda Tangan.

Catatan

Setiap pengeluar sertifikat dapat ditunjuk sebagai otoritas root tepercaya dengan menempatkan sertifikat pengeluar itu di penyimpanan sertifikat otoritas akar tepercaya.

Menonaktifkan kepercayaan rantai

Saat membuat layanan baru, Anda mungkin menggunakan sertifikat yang tidak dikeluarkan oleh sertifikat akar tepercaya, atau sertifikat pengeluar itu sendiri mungkin tidak ada di penyimpanan Otoritas Sertifikasi Akar Tepercaya. Untuk tujuan pengembangan saja, Anda dapat menonaktifkan sementara mekanisme yang memeriksa rantai kepercayaan untuk sertifikat. Untuk melakukannya, atur properti CertificateValidationMode ke PeerTrust atau PeerOrChainTrust. Salah satu mode menentukan bahwa sertifikat dapat dikeluarkan sendiri (kepercayaan rekan) atau bagian dari rantai kepercayaan. Anda dapat mengatur properti di salah satu kelas berikut.

Kelas Properti
X509ClientCertificateAuthentication X509ClientCertificateAuthentication.CertificateValidationMode
X509PeerCertificateAuthentication X509PeerCertificateAuthentication.CertificateValidationMode
X509ServiceCertificateAuthentication X509ServiceCertificateAuthentication.CertificateValidationMode
IssuedTokenServiceCredential IssuedTokenServiceCredential.CertificateValidationMode

Anda juga dapat mengatur properti menggunakan konfigurasi. Elemen berikut digunakan untuk menentukan mode validasi:

Autentikasi kustom

Properti CertificateValidationMode juga memungkinkan Anda menyesuaikan cara sertifikat diautentikasi. Secara default, tingkat diatur ke ChainTrust. Untuk menggunakan nilai Custom, Anda juga harus mengatur atribut CustomCertificateValidatorType ke assembly dan jenis yang digunakan untuk memvalidasi sertifikat. Untuk membuat validator kustom, Anda harus mewarisi dari kelas X509CertificateValidator abstrak.

Saat membuat pengautentikasi kustom, metode yang paling penting untuk diambil alih adalah metode Validate. Untuk contoh autentikasi kustom, lihat sampel Validator Sertifikat X.509. Untuk informasi selengkapnya, lihat Validasi Kredensial dan Kredensial Kustom.

Gunakan cmdlet PowerShell New-SelfSignedCertificate untuk membangun rantai sertifikat

Cmdlet PowerShell New-SelfSignedCertificate membuat sertifikat X.509 dan kunci pribadi/pasangan kunci publik. Anda dapat menyimpan kunci privat ke disk lalu menggunakannya untuk mengeluarkan dan menandatangani sertifikat baru, sehingga menyimulasikan hierarki sertifikat berantai. Cmdlet dimaksudkan untuk digunakan hanya sebagai bantuan saat mengembangkan layanan dan tidak boleh digunakan untuk membuat sertifikat demi penyebaran aktual. Saat mengembangkan layanan WCF, gunakan langkah-langkah berikut untuk membangun rantai kepercayaan dengan cmdlet New-SelfSignedCertificate.

  1. Buat sertifikat otoritas akar sementara (ditandatangani sendiri) menggunakan cmdlet New-SelfSignedCertificate. Simpan kunci privat ke disk.

  2. Gunakan sertifikat baru untuk mengeluarkan sertifikat lain yang berisi kunci umum.

  3. Impor sertifikat otoritas akar ke dalam penyimpanan Otoritas Sertifikasi Akar Tepercaya.

  4. Untuk melihat instruksi langkah demi langkah, lihat Cara: Membuat Sertifikat Sementara untuk Digunakan Selama Pengembangan.

Sertifikat mana yang akan digunakan?

Pertanyaan umum tentang sertifikat adalah sertifikat mana yang akan digunakan, dan alasannya. Jawabannya bergantung pada apakah Anda memprogram klien atau layanan. Informasi berikut memberikan pedoman umum dan bukan jawaban lengkap untuk pertanyaan-pertanyaan ini.

Sertifikat layanan

Sertifikat layanan memiliki tugas utama untuk mengautentikasi server ke klien. Salah satu pemeriksaan awal ketika klien mengautentikasi server adalah membandingkan nilai bidang Subjek dengan Pengidentifikasi Sumber Daya Seragam (URI) yang digunakan untuk menghubungi layanan: DNS keduanya harus cocok. Misalnya, jika URI layanan adalah http://www.contoso.com/endpoint/, bidangSubjek juga harus berisi nilai www.contoso.com.

Perhatikan bahwa bidang dapat berisi beberapa nilai, masing-masing diawali dengan inisialisasi untuk menunjukkan nilai. Yang paling umum, inisialisasinya adalah "CN" untuk nama umum, misalnya, CN = www.contoso.com. Bidang Subjek bisa kosong. Dalam hal ini, bidang Nama Alternatif Subjek bisa berisi nilai Nama DNS.

Selain itu, perhatikan nilai bidang Tujuan yang Dimaksudkan dari sertifikat harus menyertakan nilai yang sesuai, seperti "Autentikasi Server" atau "Autentikasi Klien".

Sertifikat klien

Sertifikat klien biasanya tidak dikeluarkan oleh otoritas sertifikasi pihak ketiga. Sebaliknya, penyimpanan Pribadi lokasi pengguna saat ini biasanya berisi sertifikat yang ditempatkan di sana oleh otoritas akar, dengan tujuan yang dimaksudkan, yaitu "Autentikasi Klien". Klien dapat menggunakan sertifikat tersebut jika autentikasi timbal balik diperlukan.

Pencabutan online dan pencabutan offline

Validitas sertifikat

Setiap sertifikat hanya berlaku untuk jangka waktu tertentu, yang disebut periode validitas. Periode validitas ditentukan oleh bidang Valid dari dan Valid ke sertifikat X.509. Selama autentikasi, sertifikat diperiksa untuk menentukan apakah sertifikat masih dalam periode validitas.

Daftar pencabutan sertifikat

Otoritas sertifikasi dapat mencabut sertifikat kapan saja selama periode validitas. Hal ini dapat terjadi karena berbagai alasan, seperti kompromi kunci privat sertifikat.

Ketika hal ini terjadi, rantai apa pun yang turun dari sertifikat yang dicabut juga tidak valid, dan tidak dipercaya selama prosedur autentikasi. Untuk mengetahui sertifikat mana yang dicabut, setiap penerbit menerbitkan daftar pencabutan sertifikat (CRL) yang berstempel waktu dan tanggal. Daftar dapat diperiksa menggunakan pencabutan online atau pencabutan offline dengan mengatur properti RevocationMode atau kelas DefaultRevocationMode berikut ke salah satu nilai enumerasi X509RevocationMode: kelas X509ClientCertificateAuthentication, X509PeerCertificateAuthentication, X509ServiceCertificateAuthenticationdan IssuedTokenServiceCredential. Nilai default untuk semua properti adalah Online.

Anda juga dapat mengatur mode dalam konfigurasi menggunakan atribut revocationMode<autentikasi> (dari <serviceBehaviors>) dan <autentikasi> (dari <endpointBehaviors>).

Metode SetCertificate

Dalam WCF, Anda harus sering menentukan sertifikat atau kumpulan sertifikat yang akan digunakan layanan atau klien untuk mengautentikasi, mengenkripsi, atau menandatangani pesan secara digital. Anda dapat melakukannya secara terprogram dengan menggunakan metode SetCertificate berbagai kelas yang merepresentasikan sertifikat X.509. Kelas berikut menggunakan metode SetCertificate untuk menentukan sertifikat.

Kelas Metode
PeerCredential SetCertificate
X509CertificateInitiatorClientCredential SetCertificate
X509CertificateRecipientServiceCredential SetCertificate
X509CertificateInitiatorServiceCredential
SetCertificate

Metode SetCertificate berfungsi dengan menunjuk lokasi dan penyimpanan, jenis "temukan" (parameter x509FindType) yang menentukan bidang sertifikat, dan nilai yang akan ditemukan di bidang tersebut. Misalnya, kode berikut membuat instans ServiceHost dan mengatur sertifikat layanan yang digunakan untuk mengautentikasi layanan ke klien dengan metode SetCertificate.

Uri baseAddress = new Uri("http://cohowinery.com/services");
ServiceHost sh = new ServiceHost(typeof(CalculatorService), baseAddress );
sh.Credentials.ServiceCertificate.SetCertificate(
StoreLocation.LocalMachine, StoreName.My,
X509FindType.FindBySubjectName, "cohowinery.com");
Dim baseAddress As New Uri("http://cohowinery.com/services")
Dim sh As New ServiceHost(GetType(CalculatorService), baseAddress)
sh.Credentials.ServiceCertificate.SetCertificate( _
StoreLocation.LocalMachine, StoreName.My, _
X509FindType.FindBySubjectName, "cohowinery.com")

Beberapa sertifikat dengan nilai yang sama

Penyimpanan mungkin berisi beberapa sertifikat dengan nama subjek yang sama. Artinya, jika Anda menentukan bahwa x509FindType adalah FindBySubjectName atau FindBySubjectDistinguishedName, dan lebih dari satu sertifikat memiliki nilai yang sama, pengecualian akan ditampilkan karena tidak ada cara untuk membedakan sertifikat mana yang diperlukan. Anda dapat memitigasi hal ini dengan mengatur x509FindType ke FindByThumbprint. Bidang thumbprint berisi nilai unik yang dapat digunakan untuk menemukan sertifikat tertentu di penyimpanan. Namun, thumbprint ini memiliki kerugian: jika sertifikat dicabut atau diperbarui, metode SetCertificate akan gagal karena thumbprint juga hilang. Atau, jika sertifikat tidak lagi valid, autentikasi gagal. Cara untuk memitigasi hal ini adalah dengan mengatur parameter x590FindType ke FindByIssuerName dan menentukan nama pengeluar sertifikat. Jika tidak ada pengeluar sertifikat tertentu yang diperlukan, Anda juga dapat mengatur salah satu nilai enumerasi X509FindType lainnya, seperti FindByTimeValid.

Sertifikat dalam konfigurasi

Anda juga dapat mengatur sertifikat dengan menggunakan konfigurasi. Jika Anda membuat layanan, kredensial, termasuk sertifikat, ditentukan berdasarkan <serviceBehaviors>. Saat Anda memprogram klien, sertifikat ditentukan berdasarkan <endpointBehaviors>.

Memetakan sertifikat ke akun pengguna

Fitur IIS dan Active Directory adalah kemampuan untuk memetakan sertifikat ke akun pengguna Windows. Untuk informasi selengkapnya tentang fitur ini, lihat Memetakan sertifikat ke akun pengguna.

Untuk informasi selengkapnya tentang menggunakan pemetaan Direktori Aktif, lihat Pemetaan Sertifikat Klien dengan Pemetaan Layanan Direktori.

Dengan mengaktifkan kemampuan ini, Anda dapat mengatur properti MapClientCertificateToWindowsAccount kelas X509ClientCertificateAuthentication ke true. Dalam konfigurasi, Anda dapat mengatur atribut mapClientCertificateToWindowsAccount elemen <autentikasi> ke true, seperti yang ditunjukkan dalam kode berikut.

<serviceBehaviors>
 <behavior name="MappingBehavior">
  <serviceCredentials>
   <clientCertificate>
    <authentication certificateValidationMode="None" mapClientCertificateToWindowsAccount="true" />
   </clientCertificate>
  </serviceCredentials>
 </behavior>
</serviceBehaviors>

Memetakan sertifikat X.509 ke token yang merepresentasikan akun pengguna Windows dianggap sebagai elevasi hak istimewa karena, setelah dipetakan, token Windows dapat digunakan untuk mendapatkan akses ke sumber daya yang dilindungi. Oleh karena itu, kebijakan domain mengharuskan sertifikat X.509 untuk mematuhi kebijakannya sebelum pemetaan. Paket keamanan SChannel memberlakukan persyaratan ini.

Saat menggunakan .NET Framework 3.5 atau versi yang lebih baru, WCF memastikan sertifikat sesuai dengan kebijakan domain sebelum dipetakan ke akun Windows.

Dalam rilis pertama WCF, pemetaan dilakukan tanpa berkonsultasi dengan kebijakan domain. Oleh karena itu, ada kemungkinan bahwa aplikasi sebelumnya yang digunakan untuk bekerja saat berjalan di bawah rilis pertama, akan gagal jika pemetaan diaktifkan dan sertifikat X.509 tidak memenuhi kebijakan domain.

Lihat juga