日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt中使用OpenSSL

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt中使用OpenSSL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

OpenSSL官網

  • OpenSSL官網:OpenSSL是一個開源跨平臺的加密庫,應用廣泛。Windows提供了自己的一套加密認證API,感興趣的話可以參考:Windows Authentication Overview。

Qt官方文檔:

  • Secure Sockets Layer (SSL) Classes
  • Adding OpenSSL Support
  • Adding OpenSSL Support for Android

網站內容為英文,閱讀起來需要一些耐心。其中比較重要的信息有兩點:

  • Qt使用了OpenSSL,但是因為地區法律規定的原因,在Qt安裝包里面并沒有包含OpenSSL,需要用的話,在遵守法律的前提下,自己編譯安裝,并對你的軟件合法分發。
    這里說的“法律”,OpenSSL官網在首頁最下方對其進行了描述(來自必應翻譯):

請記住,在世界某些地區,進出口和/或使用強大的加密軟件、提供加密鉤,甚至只是傳達有關加密軟件的技術細節都是非法的。因此,當您將此包導入您的國家/地區時,請重新分發,甚至只是通過電子郵件向作者或其他人發送技術建議,甚至提供補丁,因此強烈建議您密切關注適用于您的任何法律或法規。OpenSSL 的作者對您在此處做出的任何違規行為不承擔責任。所以要小心,這是你的責任。

  • 默認情況下,Qt在運行時動態加載OpenSSL,也就是說,如果能找到對應版本的OpenSSL庫,相關模塊就支持SSL通信,否則就不支持。

Qt中哪些地方用到了OpenSSL

https

所屬模塊:QT += network

使用QNetworkAccessManager進行https訪問時,需要使用OpenSSL,通過以下代碼可以打印出QNetworkAccessManager當前可用的協議。

QNetworkAccessManager *manager = new QNetworkAccessManager(this); qDebug() << manager->supportedSchemes();

如果輸出中沒有"https",說明OpenSSL未配置,配置方法見下文。

Qt SSL Classes

所屬模塊:QT += network

Qt的SSL系列類使用OpenSSL實現,所以依賴OpenSSL庫。可以使用以下代碼打印查看當前版本的Qt依賴哪個版本的OpenSSL:

qDebug() << QSslSocket::sslLibraryBuildVersionString();

自己下載安裝OpenSSL

下載安裝有兩種方式:

  • 通過源碼編譯,直接在官網下載源碼編譯即可,優點是安全,全版本都有,缺點是費事。具體步驟參考:
    QT支持https及編譯OpenSSL。

  • 使用第三方編譯好的安裝包:優點是省事,缺點是無法確定發布者是否可靠、版本不全。具體步驟參考:Qt連接https :解決OpenSSL問題。

  • 關于libeay32.dll和ssleay32.dll

    可能讀者在搜索資料的過程中,發現有的地方說要拷貝libeay32.dll和ssleay32.dll,有的地方說要拷貝libssl-1_1.dll和libcrypto-1_1.dll。到底需要哪個?還是兩者都要?

    答案在OpenSSL git倉庫日志中,找到分支OpenSSL-1_1_0-stable,查看日志,在以下提交中有對應的描述:

    SHA-1: 6928b6171ada6d0de5a024a188dc7a68094d2dca * Change names of ordinals and libs, libeay => libcrypto and ssleay => libssl Reviewed-by: Rich Salz <rsalz@openssl.org>

    也就是說,

    • libeay32.dll和ssleay32.dll是OpenSSL v1.1.0之前版本才有的庫。
    • 從OpenSSL v1.1.0開始,libeay32.dll=>libcrypto,ssleay32.dll=>libssl。

    關于SSL漏洞

    舊版本的OpenSSL庫存在漏洞,如“心臟滴血”漏洞,詳細描述見OpenSSL漏洞列表。所以要盡量使用已知安全的、穩定的OpenSSL版本。對于Qt來說,也要使用新的Qt版本。

    但是,如果在Qt版本確定的情況下,此版本的Qt使用的OpenSSL版本也是確定的。如果此版本的OpenSSL存在漏洞怎么辦?

    1. 使用此分支的穩定版本

    以Qt5.5.1 msvc2013 32位為例,其依賴的OpenSSL版本為:OpenSSL 1.0.2g 1 Mar 2016。在 OpenSSL官網更新日志 中可以找到此版本的更新描述。

    接著,在 OpenSSL的Git倉庫 中,將其克隆到本地后查看版本分支圖,可以看到OpenSSL 1.0.2g所在分支為OpenSSL_1_0_2-stable,此分支最新版本為OpenSSL 1.0.2u。因為它們屬于同一個大版本,所以可以使用此版本的OpenSSL嘗試,這里僅提供一個思路,筆者目前未嘗試。

    再以Qt 5.12.11為例,此版本使用的OpenSSL版本為OpenSSL 1.1.1g 21 Apr 2020。直接安裝使用最新的OpenSSL v1.1.1l能夠正常運行。

    2. 更換版本分支

    截至目前,根據官網描述,v1.1.1以前的版本將不做更新,也就是說,v1.1.1之前的版本就算有重大Bug也不會修復了(除非付費支持)。在這種情況下,只有更換新的OpenSSL分支了。更換OpenSSL分支一般需要更換Qt版本。

    3. 使用第三方SSL通信庫

    可能因為某種原因,項目中無法更換Qt版本。解決此問題是方法是,使用第三方網絡通信庫,如:

    • libcurl:libcurl on github地址,libcurl可以基于較新的OpenSSL編譯,從而實現https訪問。如需要實現SSL Socket,可以查找第三方庫或自己實現。

    結語

    至此我們對Qt中使用OpenSSL有了初步的了解,更加深入的內容后續會不斷更新,敬請期待。


    本文原創首發自微信公眾號:Qt未來工程師

    總結

    以上是生活随笔為你收集整理的Qt中使用OpenSSL的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。