Saya memahami PKI dengan cukup baik dari sudut pandang konseptual - yaitu kunci pribadi / kunci publik - matematika di belakangnya, penggunaan hash & enkripsi untuk menandatangani sertifikat, Penandatanganan Digital atas Transaksi atau Dokumen dll. Saya juga telah bekerja pada proyek di mana terbuka Perpustakaan C digunakan dengan sertifikat untuk mengamankan komunikasi dan otentikasi. Saya juga sangat akrab dengan alat baris perintah openssl.
Namun, saya memiliki sedikit pengalaman dengan proyek-proyek yang diaktifkan PKI berbasis web & karenanya saya mencoba merancang dan membuat kode proyek pribadi untuk memahami ini dengan lebih baik.
Persyaratan
Ini adalah situs web untuk bank. Semua pengguna Internet Banking diizinkan menggunakan sertifikat apa pun yang dikeluarkan oleh beberapa CA yang dikenal (verisign, Thawte, titipan, dll.). Bank tidak bertanggung jawab atas pengadaan sertifikat untuk pengguna. Sertifikat ini akan digunakan untuk otentikasi ke situs web bank. Platform / OS dll masih belum diperbaiki.
Rancangan
Saya bertanya-tanya apa cara terbaik untuk melakukan otentikasi.
Saya melihat bahwa Apache memiliki cara untuk mengaktifkan 2 cara ssl - dalam hal ini, saya pikir menavigasi ke situs web secara otomatis akan meminta sertifikat dari pengguna. Tetapi saya tidak yakin apakah ini sudah cukup karena tampaknya semua yang diverifikasi adalah apakah suatu sertifikat ditandatangani oleh CA yang tepercaya & mungkin juga apakah itu termasuk dalam daftar putih garis subjek sertifikat dll. Tetapi ini tidak cukup untuk kasus bank karena Anda harus dapat mengaitkan seorang pengguna bank dengan sertifikat.
IIS tampaknya memiliki cara dimana saya dapat memiliki sertifikat yang disimpan untuk setiap pengguna di Active Directory. Inilah yang saya mengerti dari membaca beberapa artikel MSDN. Anda mengaktifkan 2 way SSL di IIS & kemudian ketika pengguna mencoba menavigasi ke situs web, IIS akan mengirim permintaan ke browser dengan daftar CA yang disetujui dan browser akan membiarkan pengguna memilih sertifikat yang sesuai dari certstore-nya dan mengirimkannya. untuk backend. Saya berasumsi bahwa IIS akan melakukan 2 hal
- Pastikan bahwa pengguna memiliki kunci pribadi yang terkait dengan sertifikat tersebut (dengan berdasarkan negosiasi penutup)
- Berdasarkan Pemetaan Sertifikat Pengguna AD, IIS akan melaporkan nama pengguna ke aplikasi.
Lakukan kejelasan otentikasi dengan memanggil fungsi crypto, tergantung pada tergantung pada server web untuk melakukannya.
- Perlihatkan layar pengguna tempat ia mengunggah sertifikat dan aplikasi memastikan pengguna memiliki kunci pribadi yang terkait dengan sertifikat (dengan meminta front-end untuk menandatangani beberapa string menggunakan sertifikat).
- Aplikasi ini memiliki database beberapa data disimpan yang memungkinkan setiap pengguna untuk dipetakan ke userid-nya. Ini mungkin
- seluruh sertifikat yang terkait dengan masing-masing userid
- CA dan nomor seri cert yang sesuai dengan setiap id pengguna.
Saya bertanya-tanya mana yang merupakan metode yang umum digunakan? Apa praktik terbaik? Jika saya harus memilih nomor 3, apa cara terbaik untuk melakukan ini?
Sesuatu yang juga dapat dengan mudah bekerja dengan aplikasi smartphone akan menjadi bonus tambahan.
Memperbarui
Izinkan saya mengklarifikasi pernyataan saya "kode bagian otentikasi sendiri" karena beberapa jawaban tampaknya menunjukkan bahwa itu telah disalahpahami - buruk saya karena tidak jelas.
Ini tidak berarti saya sendiri yang menulis kripto. Itu hanya berarti saya benar-benar akan memanggil rutin kripto secara eksplisit daripada bergantung pada IIS atau server web lainnya melakukannya secara implisit.