2013-01-10 18 views
5

Czy można utworzyć nowy QSslSocket i przejąć na własność istniejące połączenie TCP, a stary QTcpSocket można odrzucić, bez przerywania lub zamykania połączenia TCP?Przekształcanie istniejących QTcpSocket w QSslSocket

Potrzebuję tego do zaimplementowania jawnego FTPS na moim serwerze FTP, który wymaga, aby początkowo połączenie było nieszyfrowane, i tylko na żądanie klienta FTP (komenda AUTH SSL lub AUTH TLS), jeśli w ogóle chodzi, SSL/TLS handshake jest inicjowany.

Odpowiedz

6

Tak, jest to możliwe. Najprostszym sposobem na to jest zastąpienie QTcpSocket za pomocą QSslSocket. Model QSslSocket zachowuje się dokładnie tak samo, jak normalny QTcpSocket (bez szyfrowania), dopóki nie zadzwonisz pod numer startClientEncryption. Po tym QSslSocket będzie działać jak normalny QTcpSocket, ale cała komunikacja jest szyfrowana w tle.

Używając tego, udało mi się przesłać projekt linii 100k +, aby użyć SSL w mniej niż godzinę.

Edit

Nie ma (real) napowietrznych używać QSslSocket w trybie niezaszyfrowanej ponieważ będzie po prostu zadzwonić odpowiedni QTcpSocket metody. Na przykład metoda odczytu (qsslsocket.cpp Qt 4.8.3):

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