Павел Дорофеев
Мамыр 29, 2022, 9:28 Т.Қ.

TLSv1.2-ні Qt 4.8.1-де қалай енгізу керек

Изначально 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;
    }

В общем-то и все что нужно.

Мақала бойынша сұралады0сұрақтар(лар)

1

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз