Изначально QSsl в Qt 4.8.1 (выпущенный примерно 13 лет назад) использовал только максимум TLS v1.0.
Сегодня 2022г и Tls v1.0 и v1.1 блокируются почти всеми приличными сайтами в интернете.
Qt в QSsl использует открытую библиотеку openssl.
TLS v1.2 появляется в openssl версии 1.0.2.
Собрать библиотеки openssl 1.0.2 не проблема и динамически и статически (ssleay32.dll/lib, libeay32.dll/lib).
Но вот как использовать их в Qt 4.8.1, чтобы соединение происходило по Tlsv1.2 окпзывается задачкой не тривиальной (на первый взгляд).
Что же делать? Надо изучать исходники openssl, чтобы понять для начала как вызывается Tls1.2.
И оказывается, что все на самом деле не сложно, так как разработчики openssl не меняли общую логику работы исходников. Просто в нужном месте в файле qsslsocket_openssl.cpp надо создать контекст для соединения через соответствующий вариант функции:
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; }
В общем-то и все что нужно.