大学生网站建设小结,wordpress能做论坛吗,网页视频下载软件哪个好,怎么做一个企业网站概述
OpenSSL官网
OpenSSL官网#xff1a;OpenSSL是一个开源跨平台的加密库#xff0c;应用广泛。Windows提供了自己的一套加密认证API#xff0c;感兴趣的话可以参考#xff1a;Windows Authentication Overview。
Qt官方文档#xff1a;
Secure Sockets Layer (SSL)…概述
OpenSSL官网
OpenSSL官网OpenSSL是一个开源跨平台的加密库应用广泛。Windows提供了自己的一套加密认证API感兴趣的话可以参考Windows Authentication Overview。
Qt官方文档
Secure Sockets Layer (SSL) ClassesAdding OpenSSL SupportAdding 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 rsalzopenssl.org也就是说
libeay32.dll和ssleay32.dll是OpenSSL v1.1.0之前版本才有的库。从OpenSSL v1.1.0开始libeay32.dlllibcryptossleay32.dlllibssl。
关于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版本。解决此问题是方法是使用第三方网络通信库如
libcurllibcurl on github地址libcurl可以基于较新的OpenSSL编译从而实现https访问。如需要实现SSL Socket可以查找第三方库或自己实现。
结语
至此我们对Qt中使用OpenSSL有了初步的了解更加深入的内容后续会不断更新敬请期待。 本文原创首发自微信公众号Qt未来工程师。