我正在尝试运行一个简单的客户端/服务器以使用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:很抱歉,这个问题很长,但我认为重要的是要清楚地揭示问题和背景,以帮助您轻松理解问题并为我提供更多相关的答案。
答案 0 :(得分:0)
好吧, 感谢@AlienPenguin和@Macias的建议,这是因为我的OpenSSL版本太新了。
最后,我已经安装了用于Qt构建的版本的最接近的可用版本(确实有意义,我应该考虑过),可以通过运行以下调用找到该版本:
qDebug() << QSslSocket::sslLibraryBuildVersionString();
问题解决了。
再次感谢。