Anfangs verwendete QSsl in Qt 4.8.1 (veröffentlicht vor etwa 13 Jahren) nur das Maximum von TLS v1.0.
Heute ist 2022 und Tls v1.0 und v1.1 werden von fast jeder anständigen Seite im Internet blockiert.
Qt in QSsl verwendet die offene Bibliothek openssl.
TLS v1.2 erscheint in der Openssl-Version 1.0.2.
Das Erstellen der openssl 1.0.2-Bibliotheken ist sowohl dynamisch als auch statisch kein Problem (ssleay32.dll/lib, libeay32.dll/lib).
Aber wie man sie in Qt 4.8.1 so nutzt, dass die Verbindung über Tlsv1.2 erfolgt, ist (auf den ersten Blick) keine triviale Aufgabe.
Was zu tun ist? Sie müssen zuerst den Openssl-Quellcode studieren, um zu verstehen, wie Tls1.2 aufgerufen wird.
Und es stellt sich heraus, dass alles eigentlich nicht schwierig ist, da die Openssl-Entwickler die allgemeine Logik der Quellen nicht geändert haben. Genau an der richtigen Stelle in der Datei qsslsocket_openssl.cpp müssen Sie einen Kontext für die Verbindung über die entsprechende Funktionsvariante erstellen:
switch (configuration.protocol) { case QSsl::SslV2: #ifndef OPENSSL_NO_SSL2 ctx = SSL_CTX_new(client ? SSLv2_client_method() : SSLv2_server_method()); #else ctx = 0; // SSL 2 not supported by the system, but chosen deliberately -> error #endif break; case QSsl::SslV3: #ifndef OPENSSL_NO_SSL3 //++ ctx = SSL_CTX_new(client ? SSLv3_client_method() : SSLv3_server_method()); #else ctx = 0; // SSL 3 not supported by the system, but chosen deliberately -> error #endif break; case QSsl::SecureProtocols: // SslV2 will be disabled below case QSsl::TlsV1SslV3: // SslV2 will be disabled below case QSsl::AnyProtocol: default: //--ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method()); //--ctx = SSL_CTX_new(client ? SSLv23_client_method() : SSLv23_server_method()); ctx = SSL_CTX_new(client ? TLSv1_2_client_method() : TLSv1_2_server_method()); break; //++ case QSsl::TlsV1: ctx = SSL_CTX_new(client ? TLSv1_client_method() : TLSv1_server_method()); break; }
Im Allgemeinen und alles, was benötigt wird.