Превратить существующий QTcpSocket в QSslSocket

Можно ли создать новый QSslSocket и передать его в собственность существующему TCP-соединению, а также старую QTcpSocket, которую следует отбросить, не прерывая или не закрывая TCP-соединение?

Мне нужно это для реализации явного FTPS на моем FTP-сервере, который требует, чтобы изначально соединение было незашифрованным, и только по запросу клиента FTP (команда AUTH SSL или же AUTH TLS), если это вообще происходит, инициируется рукопожатие SSL / TLS.

6

Решение

Да, это возможно. Самый простой способ сделать это — заменить QTcpSocket с QSslSocket, QSslSocket будет вести себя так же, как нормальный QTcpSocket (без шифрования), пока вы не позвоните startClientEncryption, После этого QSslSocket будет действовать как нормальный QTcpSocket но вся связь зашифрована в фоновом режиме.

Используя это, я фактически смог портировать проект с 100k + линиями и использовать SSL менее чем за час.

Нет (реальных) накладных расходов для использования QSslSocket в незашифрованном режиме, так как он просто вызовет соответствующий QTcpSocket метод. Например, метод чтения (qsslsocket.cpp Qt 4.8.3):

if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
readBytes = d->plainSocket->read(data, maxlen);
} else {
//encryption stuff
7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]