Доброго времени суток!
Собственно говоря, вопросы у меня в большей степени по SSL вообще, но буду задавать их применительно к QSslSocket
Мне необходимо установить безопасное соединение между клиентом и сервером (оба на моей совести). Проверка подлинности мне не особо нужна, она у меня будет осуществляться другими способами.
Почитал я доки, сгенерировал сертификат x509 и private RSA key. Сделал пробный сервер, в котором на каждое входящее соединение делается
C++ (Qt)
socket->setPrivateKey("/tmp/certs/server.key");
socket->setLocalCertificate("/tmp/certs/server.crt");
Взял пример из Qt network/securesocketclient. Делаю коннект на свой сервер, вижу свой сертификат, разрешаю его. Ну и вроде как защищённое соединение установлено.
Я вот только что-то не очень понимаю, как там шифрование-то проиходит? На сервере-то ладно, у него есть приватный ключ, а публичный наверно лежит в сертификате (я правильно понимаю? нет?). Но у клиента-то никакого ключа нет своего, чем он шифрует-то?
Почитал ещё. Узнал, что после принятия сертификата, клиент генерирует какое-то рандомное число, шифрует его открытым ключом сервера и посылает на сервер. Сервер дешифрует это сообщение своим приватным ключом, получает это самое рандомное число и оно уже используется для шифрования.
Я правильно всё понял?
Если да, то снова возникают вопросы. Если при шифрации этого случайного числа используется RSA (ну, приватный ключ-то RSAшный), то какой алгоритм используется для шифрации остальных сообщений? Где это указать? Где указать размер этого самого случайного числа?
И наверно последняя пара вопросов. Можно ли сделать так, чтобы и у клиента и у сервера были бы своя пара RSAшных ключей, при установке соединения они бы ими обменялись и далее шифровали\дешифровали с их помощью? Мне кажется это более логичным, нежели какое-то случайное число и неизвестный алгоритм (но я готов выслушать и другие точки зрения). Если можно, как это сделать? Всмысле какой код необходимо написать? Какие\как сертификаты\ключи сгенерировать для обеих сторон?
Заранее благодарен за помощь.