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)?