Я прочитав безліч документації, пов’язаної з цією проблемою, але досі не можу зібрати всі частини, тому хотів би задати пару запитань.
Перш за все, я коротко опишу процедуру автентифікації, наскільки я її розумію, оскільки в цьому відношенні я можу помилитися: Клієнт запускає з'єднання, на яке сервер відповідає комбінацією відкритого ключа, деяких метаданих та цифрового підпису довірена влада. Потім клієнт приймає рішення, якщо вона довіряє серверу, шифрує якийсь довільний ключ сеансу відкритим ключем і відправляє його назад. Цей ключ сеансу можна розшифрувати лише за допомогою закритого ключа, що зберігається на сервері. Це робить сервер, після чого починається сеанс HTTPS.
Отже, якщо я правильний вище, питання полягає в тому, як може статися атака "людина посередині" за такого сценарію? Я маю на увазі, навіть якщо хтось перехоплює відповідь сервера (наприклад, www.server.com) із відкритим ключем і має певні засоби, щоб змусити мене думати, що він www.server.com, він все одно не зможе розшифрувати мій ключ сеансу без приватного ключа.
Якщо говорити про взаємну автентифікацію, то чи все полягає в впевненості сервера в ідентичності клієнта? Я маю на увазі, що клієнт вже може бути впевнений, що вона спілкується з правильним сервером, але тепер сервер хоче з’ясувати, хто такий клієнт, так?
І останнє питання про альтернативу взаємній автентифікації. Якщо я виступаю клієнтом у описаній ситуації, що робити, якщо я надішлю логін / пароль у заголовку HTTP після встановлення сеансу SSL? Як я бачу, цю інформацію не можна перехопити, оскільки зв’язок уже захищений, і сервер може покладатися на нього для моєї ідентифікації. Я помиляюся? Які мінуси такого підходу порівняно із взаємною автентифікацією (важливі лише питання безпеки, а не складність реалізації)?