Название: QSslSocket, Шифрование, сертификаты и всё такое прочее Отправлено: Narsil от Июнь 24, 2010, 14:52 Доброго времени суток!
Собственно говоря, вопросы у меня в большей степени по SSL вообще, но буду задавать их применительно к QSslSocket Мне необходимо установить безопасное соединение между клиентом и сервером (оба на моей совести). Проверка подлинности мне не особо нужна, она у меня будет осуществляться другими способами. Почитал я доки, сгенерировал сертификат x509 и private RSA key. Сделал пробный сервер, в котором на каждое входящее соединение делается Код
Взял пример из Qt network/securesocketclient. Делаю коннект на свой сервер, вижу свой сертификат, разрешаю его. Ну и вроде как защищённое соединение установлено. Я вот только что-то не очень понимаю, как там шифрование-то проиходит? На сервере-то ладно, у него есть приватный ключ, а публичный наверно лежит в сертификате (я правильно понимаю? нет?). Но у клиента-то никакого ключа нет своего, чем он шифрует-то? Почитал ещё. Узнал, что после принятия сертификата, клиент генерирует какое-то рандомное число, шифрует его открытым ключом сервера и посылает на сервер. Сервер дешифрует это сообщение своим приватным ключом, получает это самое рандомное число и оно уже используется для шифрования. Я правильно всё понял? Если да, то снова возникают вопросы. Если при шифрации этого случайного числа используется RSA (ну, приватный ключ-то RSAшный), то какой алгоритм используется для шифрации остальных сообщений? Где это указать? Где указать размер этого самого случайного числа? И наверно последняя пара вопросов. Можно ли сделать так, чтобы и у клиента и у сервера были бы своя пара RSAшных ключей, при установке соединения они бы ими обменялись и далее шифровали\дешифровали с их помощью? Мне кажется это более логичным, нежели какое-то случайное число и неизвестный алгоритм (но я готов выслушать и другие точки зрения). Если можно, как это сделать? Всмысле какой код необходимо написать? Какие\как сертификаты\ключи сгенерировать для обеих сторон? Заранее благодарен за помощь. Название: Re: QSslSocket, Шифрование, сертификаты и всё такое прочее Отправлено: OKTA от Февраль 07, 2014, 15:19 Не поздновато отвечаю?)) Клиенту в данном случае не нужен закрытый ключ. Закрытый ключ, а точнее сертификат, ему нужен только в случае, если серверу так же необходимо проверить подлинность клиента. Трафик шифруется между сервером и клиентом с помощью общего секрета, который генерируется посредством алгоритма обмена ключами, типа Diffie-Hellman, RSA, DSA. Случайное число, которое отправляет клиент, зашифровав открытым ключом сервера - это предварительный общий секрет для выработки общего секрета. И фишка вся не в том, что у клиента и сервера свои RSA-ключи(они-то служат в основном для проверки подлинности), а в алгоритме выработки общего секрета без передачи его по сети)
|