文章目录
搞懂Qt OpenSSL的具体原因
Qt下的https 请求不通的一个重要原因就是缺少OpenSSL的库,很多网上的内容都直接告诉大家把这两个库(libeay32、ssleay32)复制到工程下面这是不负责的回答,一个很重要的原因就是不同版本所需要的OpenSSL的库的大版本并不相同
- Qt自从5.12.4版本所使用的OpenSSL库的版本是1.1.x,而在这之下的Qt使用的版本是1.0.2系列
- 最大的区别是什么?就是OpenSSL从1.0.2升级成了1.1.x之后,整个动态库的名字都发生了改变,经典的libeay32.dll和ssleay32.dll摇身一变改名libcrypto-1_1.dll 和libssl-1_1.dll。
- 其次就算是Qt 5.12.4以下支持的1.0.2系列库也并不相同,因为1.0.2包含从a~u这么多版本,如果你带入错误的1.0.2库,轻则导致https请求不同,重则程序直接崩溃(亲身经历)
提示:如何找到适合自己的OpenSSL库并编译
一、如何找到和自己Qt版本真正合适的库并编译
在Qt中通过qDebug()直接输出
qDebug()<<QSslSocket::sslLibraryBuildVersionString();
//输出对应的OpenSSl库
//OpenSSL 1.0.2o 27 Mar 2018
二、编译自己真正所需的OpenSSL库
1.下载OpenSSL(以我所需要的1.0.2o为例)
OpenSSL 源码历史版本下载地址
如下所示
下载完成之后我们解压到当前文件夹即可
2.配置编译环境及工具ActivePerl
2.1 由于OpenSSLwindows下需要用ActivePerl进行编译,我们首先下载,
ActivePerl 下载直通车
下载后默认安装完毕就好
2.2 配置Perl环境变量
最新版默认是添加好的环境变量的
打开终端,然后直接输入命令
Perl -help
输出如下所示就是配置完毕了
3.编译OpenSSL库
3.1启动VS2017的命令行终端
- 不同位数的库要采用不同的命令行工具
- 一定要以管理员身份运行
3.2切换到要编译的OpenSSL 目录
具体过程 ,如下所示
3.3 配置要Perl编译的位数
perl Configure VC-WIN64A no-asm --perfix="E:\\ThirdDLL\\OpenSS_LBuild64"
这里VC-WIN64A
代表目标是64位库,VC-WIN32
代表是32位库,no-asm
编译过程中不使用汇编代码加快编译过程。
3.4 执行编译
-
输入
ms\do_win64a
-
输入
nmake -f ms\ntdll.mak
(ntdll 代表动态库,nt 代表静态库)
运行完毕如下所示 -
输入
nmake -f ms\ntdll.mak install
-
输入
nmake -f ms\ntdll.mak test
进行测试
最终结果
-
编译命令汇总
perl Configure VC-WIN64A no-asm --perfix="E:\\ThirdDLL\\OpenSSL_Build64"
ms\do_win64a
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install
nmake -f ms\ntdll.mak test
总结
以上截图及操作均有本人实际操作完成