Здравствуйте, TailWind, Вы писали:
N>>signed_params передаётся подписанным. А чем именно оно подписано? N>>Как раз публичным ключом, который указан в конечном сертификате.
TW>Вот, теперь почти правильно
TW>Приватным ключом, который не указан в конечном сертификате, а не публичным
TW>Если бы публичным мог бы каждый подписать
Я чуть поспешил и скомкал фразу. Приватным ключом, таким, что соответствующий ему публичный указан в сертификате. По-моему, это очевидно, но если вы хотите уточнения, вот вам оно.
TW>А проверяют уже публичным
Ну тогда я в упор не понимаю, где вы видите проблему, если сами сразу же об этом сказали. И повторю то, что уже говорил:
1) Клиенту уже передали на этот момент (RFC5246 строки 1970-1971, если совсем уточнять), как себя идентифицирует сервер — цепочкой сертификатов. Там указан публичный ключ, который подписан этой цепочкой.
2) Клиент расшифровывает (подтверждает подпись в этом digitally-signed struct, если совсем точно) ключ в сообщении ServerKeyExchange, пользуясь этим публичным ключом. Так как никто больше кроме сервера не знает приватный ключ и не может соответственно подписать, то присылка ключа является в этом сообщении аутентичной.
3) С помощью DH KEX вырабатывается общий ключ (master secret в терминах RFC), на основании знаний, которые есть у обеих сторон, но отсутствуют (и не могут быть вычислены) MitM.