简述
传输层安全性协议(Transport Layer Security,缩写:TLS)
**(Secure Sockets Layer)缩写:SSL,**是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器-网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。在浏览器、电子邮件、即时通信、网络传真等应用程序中,广泛支持这个协议。主要的网站,如Google、Facebook等也以这个协议来创建安全连线,发送数据。当前已成为互联网上保密通信的工业标准。
SSL有多种实现,其中OpenSSL是其开源实现。
问题
使用QNetworkAccessManager报错: qt.network.ssl:QSslSocket::connectToHostEncrypted: TLS initialization faile
提示TLS初始化失败,即本地主机缺少SSL功能
定位
**输出当前Qt支持的openSSL版本 **
qDebug()<<“QSslSocket=”<<QSslSocket::sslLibraryBuildVersionString();
必须让自己所用的Qt版本与该版本支持的Openssl一致
判断系统是否支持OpenSSL
qDebug() << “OpenSSL支持情况:” << QSslSocket::supportsSsl();
如果此平台支持SSL,则返回true; 否则,返回false。 如果平台不支持SSL,则套接字将在连接阶段失败。不支持就需要看下面的解决方法。
解决
安装Openssl,下载地址
windows下
根据自己使用的QT编译器时32位还是64位,下载对应安装包。将下载的安装包进行安装,安装到第二个选项时,选择安装到指定的/bin目录下安装之后,找到安装目录下的两个文件(libcrypto-1_1.dll 和libssl-1_1.dll),拷贝到QT编译器目录下即可(C:\Qt\Qt5.12.6\5.12.6\mingw73_32\bin)。
linux下
-
下载
下载对应 tar包,https://www.openssl.org/source/openssl-1.0.2o.tar.gz -
编译
./config enable-shared
make depend
make -j4 -
Copy编译结果到qt安装目录 $QTDIR/lib, 我的目录是/opt/Qt5.7.0/5.7/gcc_64/lib/
eg : sudo cp libcrypto.so libssl.so libcrypto.so.1.0.0 libssl.so.1.0.0 /opt/Qt5.7.0/5.7/gcc_64/lib/