Как приложение Qt определяет, какие библиотеки openssl оно использует? - PullRequest
1 голос
/ 08 июня 2019

Я нахожусь на Ubuntu 16.04, работаю с Qt5.3.0-rc и установил OpenSsl 1.0.2g в / usr / bin. Я скачал последние источники OpenSsl 1.1.1c, собрал его и установил в / usr / local / bin

which openssl возвращает / usr / local / bin one

Тем не менее, когда я запускаю приложение Qt (из того же окна терминала), он по-прежнему возвращает список шифров 1.0.2g

При запуске strace ./quicksecureclient 2>&1 | grep '^open(".*\.so"' | grep -i ssl похоже, что ssl lib не загружен.

Так что я думаю, что мой первый вопрос: «Как приложение Qt определяет, какие библиотеки openssl оно использует?»

Следующая программа Qt перечисляет только 4 PSK-шифра (то же самое, что возвращается /usr/bin/openssl ciphers -v 'ALL:eNULL' | grep PSK), в то время как 1.1.1 openssl возвращает 60 элементов

#include <QCoreApplication>

#include <QSslCipher>
#include <QSslConfiguration>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    auto configuration = QSslConfiguration::defaultDtlsConfiguration();
    QList<QSslCipher> all_ciphers;
    all_ciphers = configuration.supportedCiphers();
    for(int i=0;i<all_ciphers.length();i++){
        if(all_ciphers[i].name().contains("PSK"))
                qDebug() << "Cipher " << all_ciphers[i].name();
    }
    qDebug() << "Ciphers: " << all_ciphers.length();
    return a.exec();
}

Edit1 Я думаю, что это жестко задано (определено при настройке / сборке Qt5): QSslSocket::sslLibraryBuildVersionString() выводит «OpenSSL 1.0.2k-fips 26 января 2017».
Учитывая несовместимость между 1.0 1 и 1.1 (как указывало @LorinczyZsigmond), в настоящее время я думаю, что невозможно использовать OpenSSL 1.1 с Qt5 без перекомпоновки Qt из кода

...