如何使用OpenSSL安装使QSslSocket支持SSL?

时间:2019-05-05 14:12:21

标签: c++ windows qt openssl

我正在尝试运行一个简单的客户端/服务器以使用QSslSocket实现通信。我在Windows上工作(不幸的是),我使用QtCreator来获得更多便利。

当我尝试从客户端使用MyQSslSocket->connectToHostEncrypted(ip, port)连接到服务器时,收到以下消息:

  

qt.network.ssl:QSslSocket :: connectToHostEncrypted:TLS初始化失败

打印出现的错误时,出现以下错误:

  

QAbstractSocket :: SocketError(20)

在文档中,我们可以发现此错误代码对应于QAbstractSocket::SslInternalError,其描述为:

  

“正在使用的SSL库报告了内部错误。这可能是由于库安装错误或配置错误造成的。”

经过一番调查,我发现Qt本身并没有提供OpenSSL,因此我从https://slproweb.com/products/Win32OpenSSL.html此处安装了它(二进制文件,可以确定32位和64位版本)。
在安装过程中,该dll被复制到C:\ Windows \ System32(64位)。然后,我检查了PATH环境变量是否很好地包含了该文件夹。

这时我再次尝试,但是我仍然遇到相同的问题,好像仍然找不到OpenSSL安装。

当我打印以下调用的输出时(在客户端的主要功能中):

qDebug() << QSslSocket::supportsSsl();
qDebug() << QSslSocket::sslLibraryVersionString();

我得到以下输出:

  

false
“”

我的问题是,如何使QSslSocket::supportsSsl()返回true?

如果有人可以教给我我所错过的东西,我做错了什么并告诉我应该怎样做才能使此SSL连接正常运行,我将非常感激。

Fareanor。

PS:很抱歉,这个问题很长,但我认为重要的是要清楚地揭示问题和背景,以帮助您轻松理解问题并为我提供更多相关的答案。

1 个答案:

答案 0 :(得分:0)

好吧, 感谢@AlienPenguin和@Macias的建议,这是因为我的OpenSSL版本太新了。

最后,我已经安装了用于Qt构建的版本的最接近的可用版本(确实有意义,我应该考虑过),可以通过运行以下调用找到该版本:

qDebug() << QSslSocket::sslLibraryBuildVersionString();

问题解决了。

再次感谢。