我在Ubuntu 16.04上运行Qt5.3.0-rc,并在/ usr / bin中安装了OpenSsl 1.0.2g。 我已经下载了最新的OpenSsl 1.1.1c源码,进行了构建并将其安装在/ usr / local / bin
which openssl
返回/ usr / local / bin一个
但是,当我从相同的终端窗口启动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,2017年1月26日”。
鉴于1.0 1nd 1.1之间的不兼容(如@LorinczyZsigmond指出的那样),我目前认为,如果不从代码中重建Qt,则无法将OpenSSL 1.1与Qt5一起使用