Saya telah membaca banyak sekali dokumentasi yang terkait dengan masalah ini tetapi saya masih tidak bisa mendapatkan semua bagiannya, jadi saya ingin mengajukan beberapa pertanyaan.
Pertama-tama saya akan menjelaskan secara singkat prosedur otentikasi seperti yang saya mengerti, karena saya mungkin salah dalam hal itu: Klien memulai koneksi, yang ditanggapi server dengan kombinasi kunci publik, beberapa metadata, dan tanda tangan digital dari sebuah otoritas terpercaya. Kemudian klien mengambil keputusan jika dia mempercayai server, mengenkripsi beberapa kunci sesi acak dengan kunci publik dan mengirimkannya kembali. Kunci sesi ini hanya dapat didekripsi dengan kunci pribadi yang disimpan di server. Server melakukan ini dan kemudian sesi HTTPS dimulai.
Jadi, jika saya benar di atas, pertanyaannya adalah bagaimana serangan man-in-the-middle bisa terjadi dalam skenario seperti itu? Maksud saya, bahkan jika seseorang mencegat respons server (mis. Www.server.com) dengan kunci publik dan memiliki beberapa cara untuk membuat saya berpikir bahwa dia adalah www.server.com, dia tetap tidak dapat mendekripsi kunci sesi saya tanpa kunci pribadi.
Berbicara tentang otentikasi bersama, apakah itu semua tentang kepercayaan server tentang identitas klien? Maksud saya, klien sudah dapat yakin bahwa dia berkomunikasi dengan server yang benar, tetapi sekarang server ingin mengetahui siapa kliennya, bukan?
Dan pertanyaan terakhir adalah tentang alternatif otentikasi timbal balik. Jika saya bertindak sebagai klien dalam situasi yang dijelaskan, bagaimana jika saya mengirim login / kata sandi di header HTTP setelah sesi SSL dibuat? Seperti yang saya lihat, informasi ini tidak dapat dicegat karena koneksi sudah diamankan dan server dapat mengandalkannya untuk identifikasi saya. Apakah aku salah? Apa kelemahan dari pendekatan seperti itu dibandingkan dengan otentikasi bersama (hanya masalah keamanan yang penting, bukan kompleksitas implementasi)?
sumber
Server merespons dengan rantai sertifikat X.509 dan tanda tangan digital yang ditandatangani dengan kunci pribadinya sendiri.
Benar.
Tidak. Klien dan server terlibat dalam proses pembuatan kunci sesi bersama di mana kunci sesi itu sendiri tidak pernah dikirim sama sekali.
Tidak.
Tidak.
The TLS / SSL sesi dimulai, tetapi ada langkah-langkah lebih pertama.
Dengan menyamar sebagai server dan bertindak sebagai titik akhir SSL. Klien harus mengabaikan langkah otorisasi apa pun. Sayangnya, satu-satunya langkah otorisasi di sebagian besar sesi HTTPS adalah pemeriksaan nama host.
Lihat di atas. Tidak ada kunci sesi untuk didekripsi. Koneksi SSL itu sendiri aman, yang mungkin tidak aman dengan siapa Anda berbicara .
Benar.
Tidak.
Ini hanya seaman nama pengguna / kata sandi, yang jauh lebih mudah bocor daripada kunci pribadi.
sumber
Siapapun di jalan antara klien dan server dapat melakukan serangan man in the middle pada https. Jika menurut Anda ini tidak mungkin atau jarang, pertimbangkan bahwa ada produk komersial yang secara sistematis mendekripsi, memindai, dan mengenkripsi ulang semua lalu lintas ssl di gateway internet. Mereka bekerja dengan mengirim klien sebuah sertifikat ssl yang dibuat dengan cepat dengan rincian yang disalin dari sertifikat ssl "asli", tetapi ditandatangani dengan rantai sertifikat yang berbeda. Jika rantai ini diakhiri dengan CA browser mana pun yang tepercaya, MITM ini tidak akan terlihat oleh pengguna. Produk ini terutama dijual ke perusahaan untuk "mengamankan" (polisi) jaringan perusahaan, dan harus digunakan dengan sepengetahuan dan persetujuan pengguna. Namun secara teknis, tidak ada yang menghentikan penggunaannya oleh ISP atau operator jaringan lainnya. (Akan aman untuk mengasumsikan NSA memiliki setidaknya satu kunci penandatanganan CA root tepercaya ).
Jika Anda menyajikan halaman, Anda dapat menyertakan header HTTP yang menunjukkan kunci publik apa halaman tersebut harus ditandatangani. Ini mungkin membantu untuk mengingatkan pengguna ke MITM tentang koneksi "aman" mereka, tetapi ini adalah teknik kepercayaan-pada-penggunaan pertama. Jika Bob belum memiliki catatan dari pin kunci publik "nyata", Mallory hanya menulis ulang header pkp dalam dokumen. Daftar situs web yang menggunakan teknologi ini (HPKP) sangat pendek. Ini termasuk google dan dropbox, untuk kredit mereka. Biasanya, gateway penyadapan https akan melambai melalui halaman dari beberapa situs terpercaya besar yang menggunakan HPKP. Jika Anda melihat kesalahan HPKP saat Anda tidak menduganya, waspadalah.
Mengenai kata sandi, semua yang ada di koneksi https diamankan dengan https, kecuali nama domain, yang harus jelas agar permintaan dapat dialihkan. Secara umum, disarankan untuk tidak meletakkan kata sandi dalam string kueri, di mana kata sandi dapat berkeliaran di log, bookmark, dll. Tetapi string kueri tidak terlihat kecuali https dikompromikan.
sumber
sumber
Semua yang Anda katakan benar kecuali bagian tentang kunci sesi. Inti dari CA adalah untuk mengalahkan serangan man-in-the-middle - yang lainnya dilakukan oleh SSL itu sendiri. Otentikasi klien adalah alternatif dari nama pengguna dan skema kata sandi.
sumber