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