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

下载安装有两种方式:

  1. 通过源码编译,直接在官网下载源码编译即可,优点是安全,全版本都有,缺点是费事。具体步骤参考:
    QT支持https及编译OpenSSL。

  2. 使用第三方编译好的安装包:优点是省事,缺点是无法确定发布者是否可靠、版本不全。具体步骤参考: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未来工程师

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】带你玩转Visual Studio——03.带你了解VC++各种类型的工程

上一篇文章带你玩转Visual Studio——带你新建一个工程一文中提到新建一个工程时会有很多的工程类型(图1)&#xff0c;现在将简单介绍各种类型工程的含义和主要用途。由于这里包含的工程类型太多&#xff0c;有很多本人也没有接触过&#xff0c;有些可能理解的不太对的地方还请…

数学学习过程中的感悟(一)

前言 最近在考研复习&#xff0c;回顾自己的学习数学的过程&#xff0c;有一些感悟&#xff0c;在此记录一下。 正文 大学的时候&#xff0c;学习到了高数&#xff0c;但是接触不久就丧失了兴趣。明明中学时代还很喜欢学习数学&#xff0c;为什么到了大学&#xff0c;一点兴…

如何调整金格电子章服务器印章_重磅!公安部再度认可电子签名、电子印章法律效力!...

近日&#xff0c;公安部发布《关于修改〈公安机关办理刑事案件程序规定〉的决定》&#xff0c;对《公安机关办理刑事案件程序规定》&#xff08;以下简称规定&#xff09;进行了全面修改完善&#xff0c;并将于9月1日起施行。修改后的规定共14章388条。其中&#xff0c;新增的第…

【转】带你玩转Visual Studio——04.带你高效开发

上一篇文章带你玩转Visual Studio——带你了解VC各种类型的工程一文中讲了各种类型VC工程的主要功能和用途。现在将带你一起快速开发c程序。 有过Java开发经验的人都知道Java的常用开发工具(如Eclipse、Intellij IDEA等)都有非常强大的关键字高亮、智能提示、快速追踪等的功能…

python编译make_Python在Linux下编译安装

【准备环境】Linux centos【前言】1 linux下默认带Python&#xff0c;带的是2.7版本的 &#xff0c;如果需要升级版本&#xff0c;需要把系统的自带的Python改名或者卸载&#xff0c;再次安装你所需要的Python版本&#xff0c;centos下由于yum依赖自带的Python2.7&#xff0c;所…

【信号与线性系统】知识点与学习攻略

知识点理解 关于正交分解可以看这个视频&#xff1a; https://www.bilibili.com/video/BV1qV411C7u6/ 记住两个完备正交函数集&#xff1a; 一个是正余弦三角函数&#xff0c;非零不同频率项乘积为0&#xff0c;非零同频率项乘积积分为T/2&#xff0c;零频率项乘积积分为T。 一…

【转】C# 网络连接中异常断线的处理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(设置心跳)

在使用 TcpClient 网络连接中常常会发生客户端连接异常断开, 服务端需要设置检测手段进行这种异常的处理&#xff1b; 1、对于短连接, 通过对 Socket 属性ReceiveTimeout 和 SendTimeout 设置恰当的值, 使得程序在进行读/写时超时, 会产生 SocketException 异常, 通过检查这个…

python 几何教学_opencv-python教程学习系列11-几何变换

前言opencv-python教程学习系列记录学习python-opencv过程的点滴&#xff0c;本文主要介绍几何变换&#xff0c;坚持学习&#xff0c;共同进步。系统环境系统&#xff1a;win7_x64;python版本&#xff1a;python3.5.2&#xff1b;opencv版本&#xff1a;opencv3.3.1&#xff1b…

【数学+编程】对数学函数进行抽象

目的 将数学函数抽象为类。 类名 函数 属性 基本属性 表达式定义域值域周期性、单调性等特性 方法 求值&#xff1a;返回值平移&#xff1a;返回新的函数伸缩&#xff1a;返回新的函数反转&#xff1a;返回新的函数复合&#xff1a;参数为另外一个函数&#xff0c;返回…

2020-12-19

逆变&#xff08;contravariant&#xff09;与协变&#xff08;covariant&#xff09;是C#4新增的概念&#xff0c;许多书籍和博客都有讲解&#xff0c;我觉得都没有把它们讲清楚&#xff0c;搞明白了它们&#xff0c;可以更准确地去定义泛型委托和接口&#xff0c;这里我尝试画…

【数学】定积分和不定积分的区别

不定积分的研究对象是某函数下的映射关系积分后&#xff0c;得到怎样的新的映射关系。 定积分的研究对象是积分的值。

微软模拟飞行10厦门航空涂装_《微软飞行模拟器》多人游戏模式演示:可组队飞行...

IT之家3月29日消息 《微软飞行模拟器》(Flight Simulator)是2020年最受期待的游戏之一&#xff0c;开发商Asobo Studio现在分享了一段新的视频&#xff0c;详细介绍了《微软飞行模拟器》的多人游戏模式。《微软飞行模拟器》游戏的主模式将看到所有玩家在同一个世界中一起玩。微…

【信号与系统】系统特性

系统 系统就是一个包含f(t)、y(t)及其衍生函数&#xff08;如导数&#xff0c;复合函数&#xff09;的方程。 所以在你看到一个方程的时候&#xff0c;第一反应是&#xff1a; 方程描述了一个系统&#xff0c;在时刻t&#xff0c;可以把f(t)变成y(t)。如何变的呢&#xff1f;由…

【转】UDP协议格式以及在java中的使用

UDP协议格式以及在java中的使用 UDP是面向无连接的通讯协议&#xff0c;由于通讯不需要连接&#xff0c;所以可以实现广播发送。UDP通讯时不需要接收方确认&#xff0c;属于不可靠的传输&#xff0c;可能会出现丢包现象&#xff0c;实际应用中要求程序员编程验证。 UDP适用于…

python网页填表教程_PythonSpot 中文系列教程 · 翻译完成

原文&#xff1a;PythonSpot Python Tutorials 协议&#xff1a;CC BY-NC-SA 4.0 欢迎任何人参与和完善&#xff1a;一个人可以走的很快&#xff0c;但是一群人却可以走的更远。在线阅读ApacheCN 学习资源目录PythonSpot 中文系列教程初学者 介绍Python 字符串字符串&#xff0…

Qt生成的exe中为什么会带有不该有的盾牌?

参考 为什么EXE文件出现了不该出现的“盾牌”什么情况下 exe 会自动加上 UAC 的盾标&#xff1f;

【转】TCP/IP协议到底在讲什么?【乐搏TestPro】

用比喻和漫画给有需要的小伙伴解释下IP、TCP捎带题一下各种协议与HTTP协议的关系&#xff1b; 目录&#xff1a; 负责传输的IP协议 确保可靠性的TCP协议 各种协议与HTTP协议的关系 一、负责传输的IP协议 按照层次分&#xff0c;IP&#xff08;全称&#xff1a;Internet Prot…

python文本去重函数_python3.4.3下逐行读入txt文本并去重的方法

读写文件时应注意的问题包括&#xff1a;1.字符编码2.操作完成即时关闭文件描述符3.代码兼容性几种方法&#xff1a;#!/bin/python3original_list1[" "]original_list2[" "]original_list3[" "]original_list4[" "]newlist1[" &q…

Qt中标绘功能的实现方法对比

使用Qt开发桌面程序&#xff0c;经常会有标绘的需求&#xff0c;一般有以下几点&#xff1a; 新建&#xff1a;圆、矩形、椭圆、文字标注&#xff0c;插入图像等&#xff1b;编辑&#xff1a;指对已标绘内容的属性编辑修改功能&#xff1b;删除&#xff1a;指对已标绘内容的删…

【转】PE文件结构详解--(完整版)

&#xff08;一&#xff09;基本概念 PE&#xff08;Portable Execute&#xff09;文件是Windows下可执行文件的总称&#xff0c;常见的有DLL&#xff0c;EXE&#xff0c;OCX&#xff0c;SYS等&#xff0c;事实上&#xff0c;一个文件是否是PE文件与其扩展名无关&#xff0c;P…