QT支援https及編譯OpenSSL
文章目錄
搞懂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
總結
以上截圖及操作均有本人實際操作完成
相關文章
- 編譯支援iOS的libcurl+OpenSSL庫(支援https IPv6)編譯iOSHTTP
- Qt for Windows:Qt 5.8.0 MinGW 靜態編譯版本(包含OpenSSL)QTWindows編譯
- openssl原始碼編譯及配置方法原始碼編譯
- ijkplayer 的編譯、打包 framework 和 https 支援編譯FrameworkHTTP
- 自己動手編譯OpenSSL庫編譯
- Qt開發筆記:OpenSSL庫介紹、windows上mingw32版本的OpenSSL編譯模組化QT筆記Windows編譯
- openssl-3.0.0-alpha9編譯編譯
- 編譯Android的OpenSSL類庫編譯Android
- net-snmp原始碼VS2013編譯新增加密支援(OpenSSL)原始碼編譯加密
- QT中文編譯出錯QT編譯
- Qt編譯MySQL驅動QT編譯MySql
- 靜態編譯Qt5.4.1和Qt WebKit編譯QTWebKit
- https--OpenSSL生成root CA及簽發證書HTTP
- Linux系統下編譯Openssl 步驟:Linux編譯
- 使用VS2015 編譯Openssl編譯
- 使用openSSL構造一個支援https的nodejs伺服器HTTPNodeJS伺服器
- Qt 編譯qt-material-widgets皮膚的方法QT編譯
- Window下 Qt 編譯MySQL驅動QT編譯MySql
- Qt 獲取程式編譯時間QT編譯
- win10 64位系統下openssl編譯Win10編譯
- OpenSSL 編譯(vs2015+win10)編譯Win10
- PHP編譯器BPC 6.0釋出,支援namespace,支援closure,成功編譯 workermanPHP編譯namespace
- CMake編譯Qt工程時的問題編譯QT
- ubuntu16交叉編譯Qt5.9Ubuntu編譯QT
- Qt5.4 MSVC mysql驅動編譯;QTMySql編譯
- 交叉編譯Qt/E和Qtopia過程編譯QT
- Andorid Studio NDK 開發 – 編譯 OpenSSL 類庫編譯
- Andorid Studio NDK開發-編譯OpenSSL類庫編譯
- qt 5.12測試openssl報錯QT
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- Windows系統編譯libhv帶SSL,開啟WITH_OPENSSLWindows編譯
- Qt4 原始碼編譯安裝指南QT原始碼編譯
- 3568F-Qt工程編譯說明QT編譯
- 麒麟系統開發筆記(三):從Qt原始碼編譯安裝之編譯安裝Qt5.12筆記QT原始碼編譯
- .NetCore+OpenSSL實現HttpsNetCoreHTTP
- 使用OpenSSL自建一個HTTPS服務HTTP
- OpenSSL的在windows和Linux中的編譯和安裝WindowsLinux編譯
- Qt 中有兩種方式編譯MinGW和MSVCQT編譯