Qt自帶的老版本OpenSSL1.0.x在今年(2019)就要結束LTS支持了,那麼從Qt5.12.4開始,Qt將啓用1.1.x,新版本帶來的TLS1.3,以前經典的名字叫libeay32.dll和ssleay32.dll,現在改名變成了libcrypto-1_1.dll 和libssl-1_1.dll
1. 下載安裝
windows版本下載地址:http://slproweb.com/products/Win32OpenSSL.html
根據自己工程對應版本32位或者64位,安裝後拷貝libcrypto-1_1.dll 和libssl-1_1.dll,64位叫libcrypto-1_1-x64.dll和libssl-1_1-x64.dll到自己的exe目錄下,OpenSSl安裝選項有一個是否拷貝到系統目錄的選項,勾上會自動拷貝到了C盤的系統目錄下面。程序會默認從系統目錄自動加載。如需移除OpenSSL,需要把系統目錄下的也手動刪除掉,64位下安裝32位的OpenSSL系統目錄C:\Windows\SysWOW64,安裝的64位的系統目錄爲C:\Windows\System32。
2. 查詢是否支持
查看當前Qt版本是否支持OpenSSL,Qt編譯使用的OpenSSL版本。當前使用的OpenSSl版本。只要編譯版本是1.1.1的。安裝的也使用1.1.1即可。後面的d、g版本號可不完全一致。使用版本比編譯版本高即可。
bool bSupp = QSslSocket::supportsSsl();
QString buildVersion = QSslSocket::sslLibraryBuildVersionString();
QString version = QSslSocket::sslLibraryVersionString();
qDebug() << bSupp << buildVersion << version << endl;
不支持時打印如下
false “OpenSSL 1.1.1d 10 Sep 2019” “”
支持openSSL時打印如下
true “OpenSSL 1.1.1d 10 Sep 2019” “OpenSSL 1.1.1g 21 Apr 2020”
查看當前網絡請求支持協議
QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
qDebug() << accessManager->supportedSchemes();
不支持https時顯示結果如下
(“ftp”, “file”, “qrc”, “http”, “data”)
支持https時顯示結果如下
(“ftp”, “file”, “qrc”, “http”, “https”, “data”)
同時會報錯顯示如下:
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
found error … code: 99
TLS initialization failed
3. 使用方法
使用https請求時,代碼需要如下配置進行:
QNetworkRequest request;
// 發送https請求前準備工作;
QSslConfiguration config;
QSslConfiguration conf = request.sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
conf.setProtocol(QSsl::TlsV1SslV3);
request.setSslConfiguration(conf);
request.setUrl(QUrl("https://gitee.com/"));