Я нахожусь на 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 из кода