Apa perbedaan diantara keduanya?
94
The X509Certificate diperkenalkan di NET v1.0 / 1.1 dan (relatif) terbatas dalam fungsinya. Ini dapat digunakan untuk mendapatkan informasi tentang sertifikat yang ada (tanggal valid, penerbit, dll.). Itu memiliki metode / operasi sederhana (yaitu membaca sertifikat dari disk).
The x509Certificate2 adalah subclass dari X509Certificate dengan fungsi tambahan.
X509Certificate2
juga memiliki anggota untuk kunci privat, yang bukan merupakan bagian dari sertifikat itu sendiri tetapi nyaman untuk dikaitkan dengan kelas yang mewakili sertifikat X.509.Demi kelengkapan, berikut ini salinan dari bagian relevan dari situs yang ditautkan ke jawaban @ dommer, karena situs tersebut mungkin tidak lagi aktif dan hanya ada di cache Google untuk entah berapa lama:
sumber
Untuk mengonversi sertifikat X.509 dari "X509Certificate" menjadi "X509Certificate2", coba sesuatu seperti ini:
sumber
Bagi mereka yang ingin membaca sertifikat dan menggunakan ini untuk mengotentikasi, cukup membuat X509Certificate2 dan meneruskan X509Certificate di konstruktornya.
Untuk rakitan bertanda tangan (exe), kodenya adalah kode seperti ini, dan saya menghilangkan validasi kesalahan untuk kesederhanaan.
Module m = Assembly.GetEntryAssembly().GetModules()[0]; using (var cert = m.GetSignerCertificate()) using (var cert2 = new X509Certificate2(cert)) { var _clientHandler = new HttpClientHandler(); _clientHandler.ClientCertificates.Add(cert2); _clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual; var myModel = new Dictionary<string, string> { { "property1","value" }, { "property2","value" }, }; using (var content = new FormUrlEncodedContent(myModel)) using (var _client = new HttpClient(_clientHandler)) using (HttpResponseMessage response = _client.PostAsync($"{url}/{controler}/{action}", content).Result) { response.EnsureSuccessStatusCode(); string jsonString = response.Content.ReadAsStringAsync().Result; var json = new Newtonsoft.Json.JsonSerializer(); var myClass = JsonConvert.DeserializeObject<MyClass>(json); } }
Jelas Anda kelas tidak disebut MyClass tetapi beberapa objek bisnis yang Anda harapkan dari layanan web.
Anda dapat mengirim kelas ke tindakan Anda dengan mengirimkan properti & nilai yang Anda perlukan untuk diisi. Sekarang Anda dapat memastikan bahwa permintaan yang Anda terima berasal dari klien seluler atau windows yang valid dengan membaca sertifikat permintaan seperti:
public class MyController : ApiController { public IHttpActionResult Get() { X509Certificate2 clientCertInRequest = Request.HttpContext.Connection.ClientCertificate; if (!clientCertInRequest.Verify() || !AllowedCerialNumbers(clientCertInRequest.SerialNumber)) { Response.StatusCode = 404; return null; } //your code }
}
Yang tersisa adalah menyetel server web Anda untuk menerima sertifikat klien ... Anda dapat membaca semua tentang properti yang berasal dari format baru dan Anda telah mengamankan layanan web publik Anda, sesuatu yang paling gagal dilakukan karena hanya diberi otorisasi saja tidak cukup baik lagi (jika pernah)
sumber