Я прочитал массу документации, связанной с этой проблемой, но все еще не могу собрать все воедино, поэтому я хотел бы задать пару вопросов.
Прежде всего, я кратко опишу процедуру аутентификации, как я ее понимаю, поскольку могу ошибаться в этом отношении: клиент запускает соединение, на которое сервер отвечает комбинацией открытого ключа, некоторых метаданных и цифровой подписи доверенный авторитет. Затем клиент принимает решение, доверяет ли он серверу, шифрует случайный ключ сеанса открытым ключом и отправляет его обратно. Этот сеансовый ключ можно расшифровать только с помощью закрытого ключа, хранящегося на сервере. Сервер делает это, а затем начинается сеанс HTTPS.
Итак, если я прав выше, вопрос в том, как может произойти атака «человек посередине» в таком сценарии? Я имею в виду, что даже если кто-то перехватит ответ сервера (например, www.server.com) с помощью открытого ключа и найдет средства, чтобы заставить меня думать, что это www.server.com, он все равно не сможет расшифровать мой сеансовый ключ. без закрытого ключа.
Говоря о взаимной аутентификации, все ли связано с уверенностью сервера в идентичности клиента? Я имею в виду, что клиент уже может быть уверен, что он общается с нужным сервером, но теперь сервер хочет узнать, кто этот клиент, верно?
И последний вопрос об альтернативе взаимной аутентификации. Если я буду действовать как клиент в описанной ситуации, что, если я отправлю логин / пароль в заголовке HTTP после установления сеанса SSL? На мой взгляд, эту информацию невозможно перехватить, потому что соединение уже защищено, и сервер может полагаться на него для моей идентификации. Я ошибся? Каковы недостатки такого подхода по сравнению с взаимной аутентификацией (важны только вопросы безопасности, а не сложность реализации)?