Павел Дорофеев
29 травня 2022 р. 21: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

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up