QT支持https及编译OpenSSL

2023-11-13


搞懂Qt OpenSSL的具体原因

Qt下的https 请求不通的一个重要原因就是缺少OpenSSL的库,很多网上的内容都直接告诉大家把这两个库(libeay32、ssleay32)复制到工程下面这是不负责的回答,一个很重要的原因就是不同版本所需要的OpenSSL的库的大版本并不相同

  1. Qt自从5.12.4版本所使用的OpenSSL库的版本是1.1.x,而在这之下的Qt使用的版本是1.0.2系列
  2. 最大的区别是什么?就是OpenSSL从1.0.2升级成了1.1.x之后,整个动态库的名字都发生了改变,经典的libeay32.dll和ssleay32.dll摇身一变改名libcrypto-1_1.dll 和libssl-1_1.dll。
  3. 其次就算是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 源码历史版本下载地址
如下所示
历史版本很多,这里选择1.0.2系列
这里我们下载所需的o版本
下载完成之后我们解压到当前文件夹即可

2.配置编译环境及工具ActivePerl

2.1 由于OpenSSLwindows下需要用ActivePerl进行编译,我们首先下载,

ActivePerl 下载直通车
ActivePerl下载示意
下载后默认安装完毕就好

2.2 配置Perl环境变量

配置Perl环境变量
最新版默认是添加好的环境变量的
打开终端,然后直接输入命令

Perl -help

输出如下所示就是配置完毕了
Perl配置结果

3.编译OpenSSL库

3.1启动VS2017的命令行终端

  • 不同位数的库要采用不同的命令行工具
  • 一定要以管理员身份运行

OpenSSL不同位数编译区别
OpenSSL CMD 管理员启动

3.2切换到要编译的OpenSSL 目录

具体过程 ,如下所示
启动CMD,切换到工作目录

3.3 配置要Perl编译的位数

perl Configure VC-WIN64A no-asm --perfix="E:\\ThirdDLL\\OpenSS_LBuild64"

这里VC-WIN64A代表目标是64位库,VC-WIN32 代表是32位库,no-asm
编译过程中不使用汇编代码加快编译过程。
配置Perl编译条件在这里插入图片描述

3.4 执行编译

  • 输入ms\do_win64a
    输入ms\do_win64a

  • 输入nmake -f ms\ntdll.mak(ntdll 代表动态库,nt 代表静态库)
    输入nmake -f ms\ntdll.mak
    运行完毕如下所示nmake -f ms\ntdll.mak结果

  • 输入nmake -f ms\ntdll.mak install
    输入nmake -f ms\ntdll.mak install

  • 输入nmake -f ms\ntdll.mak test 进行测试
    输入nmake -f ms\ntdll.mak test
    最终结果
    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

总结

以上截图及操作均有本人实际操作完成

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT支持https及编译OpenSSL 的相关文章

  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 如何最好地将 Facebook 评论从 http 移至 https

    我们正在将 Ruby On Rails 网站从 HTTP 迁移到 HTTPS 我们的网站使用fb comments用于捕获各个页面上的用户评论的插件 在我们的测试过程中 我们发现当我们将页面从 HTTP 切换到 HTTPS 时 Facebo
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • 如何禁用 HTTP 的 HSTS 标头?

    我已将以下内容插入到我网站的 htaccess 中 以便能够访问HSTS预加载列表 https hstspreload appspot com
  • 需要使用 openssl 加密和解密文件的示例 C 代码

    我正在用 Linux C 编写代码 我需要使用以下命令来加密和解密文件 openssl 目前 我使用系统命令 des3 e nosalt k 0123456789012345 in inp file out out file 进行加密 使用
  • Qt 创建者 + MITK (Linux)

    我正在尝试使用MITK 与 Qt Creator 我已经通过 ccmake 成功编译并使用了 VTK 和 ITK 我已经编译了 MITK超级建造模式 它下载 CTK VTK ITK 等 然后我就配置好了 我已经用 make 编译了 大约两个
  • Qt - 如何粘合两个窗口并将它们移动在一起?

    就像qmmp Qt 音乐播放器ui设计一样 这两个或三个窗口实际上在同一个窗口中 因为只有一个dock图标 并且这些窗口可以一起移动并相互附着 我看了源码 好像有用QDockWidget 但我真的不知道如何获得它的细节 当您手动移动辅助窗口
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • 用 C++ 解密文件,该文件使用 openssl -aes-128-cbc 加密

    我正在尝试用 C 解密文件 该文件使用以下命令加密 openssl enc nosalt aes 128 cbc pass pass test in test txt out test enc txt p 控制台显示key 098F6BCD
  • QGraphicsScene::clear 不会改变 sceneRect

    我有一个 QGraphicsScene 场景 和 QGraphicsView graphicsView 我有一个画图的方法 当我需要重绘所有图形时 我调用这个方法 一切都好 但我意识到 scene gt clear 不会改变 sceneRe
  • 向 Qt 样式表添加特异性时丢失样式

    这是我的代码 const QString STYLE SHEET background color rgba x x x y border 1px solid gray border radius 0px border top 1px so
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • 如何将图像显示为缩略图

    我有一个QTreeView显示硬盘驱动器和目录 我也有一个QListView显示图像文件如下 但我想将图像显示为缩略图 如下所示 My code mainWidget mainWidget QWidget parent QWidget pa
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 在 MacOS 终端上运行 ffmpeg [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我对 MacOS 相当陌生 我发现使用终端来获取信息并不容易ffmpeg和我在 Window 上一样正常运行 我有 ffmpeg 二进制文件ffmpe
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons

随机推荐

  • 设置SSH密钥对的必要性

    SSH介绍 SSH 为 Secure Shell 的缩写 由 IETF 的网络小组 Network Working Group 所制定 SSH 为建立在应用层基础上的安全协议 SSH 是较可靠 专为远程登录会话和其他网络服务提供安全性的协议
  • golang加载双向认证加密的证书key文件

    证书的key是可以加密保存的 我们需要进行解密加载 func MyLoadX509KeyPair certFile keyFile password string tls Certificate error certPEMByte err
  • 开放API接口或URL链接给第三方使用

    使用场景 场景1 应用做到一定程度后 会有一些第三方用户或机构要对接部分的功能进入他们自己的应用 比如 要通过URL的方式提供一个含有加密视频文件的H5页面给第三方使用 实现思路 1 后台管理系统给不同的第三方开权限 分别提供AppID和A
  • 学习率衰减

    在训练深度神经网络时 通常会随着训练的进行降低学习率 这可以通过使用预定义的学习率计划或自适应学习率方法来完成 学习率表 学习率时间表旨在根据预先定义的时间表降低学习率 从而在训练过程中调整学习率 常见的学习率时间表包括基于时间的衰减 逐步
  • AES算法的CBC和ECB模式!——密钥加密

    一 AES算法 AES Advanced Encryption Standard 是一种对称密钥加密算法 AES算法采用分组密码的方式 将明文划分成固定长度的数据块 对每个数据块进行加密 最终得到密文 AES算法的密钥长度可以为128位 1
  • 利用Netty构建自定义协议的通信

    在复杂的网络世界中 各种应用之间通信需要依赖各种各样的协议 比如 HTTP Telnet FTP SMTP等等 在开发过程中 有时候我们需要构建一些适应自己业务的应用层协议 Netty作为一个非常优秀的网络通信框架 可以帮助我们完成自定义协
  • 【Linux + 安装库】Ubuntu18.4.0下安装gmp+ntl+crytpo++库的相关操作

    一 装Ubuntu 1 虚拟机下装好的ubuntu系统安装编译器 首先需要添加源 代码 sudo add apt repository ppa ubuntu toolchain r test 2 添加源之后 安装编译器 gcc安装 sudo
  • Spring Boot 学习研究笔记(十二)Dcoker 中部署SpringBoot jar包

    Linux Centos8 使用 DOCKER 部署JAR包 1 进入项目根目录 cd project 2 创建存放jar包的目录 mkdir springboot test 3 进入 project springboot test 编写D
  • 软件调试之堆和堆检查

    当用户启动一个程序时 系统会将程序文件从外部存储器 硬盘等 加载到内存中 当程序工作时 需要使用内存空间来放置代码和数据 在使用一段内存之前 程序需要以某种方式 API或库函数 发出申请 接受到申请的一方 内存管理器或C运行库 根据申请者的
  • 【Ansible自动化运维实战】使用ansible批量部署开机启动时为字符界面

    Ansible自动化运维实战 使用ansible批量部署开机启动时为字符界面 一 查看当前启动默认的引导目标 二 编辑playbook 三 测试playbook语法 四 运行playbook 五 测试结果 一 查看当前启动默认的引导目标 a
  • 【信息技术】【2018.01】射频功率放大器的行为建模与数字预失真

    本文为奥地利格拉茨技术大学的博士论文 共147页 数字无线发射机中的射频功率放大器 RF PA 是关系到能量消耗和信号质量的关键部件 特别是由于当今宽带多载波调制方法产生的信号峰均比很高 很难构建出能量效率高 满足标准严格线性要求的射频功率
  • 自己动手写basic解释器(一)

    自己动手写basic解释器 刺猬 http blog csdn net littlehedgehog 注 文章basic解释源码摘自梁肇新先生的 编程高手箴言 据他所说这个代码也是网上摘录的 源码解读参考 java编程艺术 java编程艺术
  • 禁止显示状态 错误 LNK1104 无法打开文件“boost_thread-vc142-mt-gd-x64-1_79.lib”

    系列文章目录 文章目录 系列文章目录 前言 一 问题原因 二 解决办法 1 更改vs2019项目配置 2 第二种方法 前言 别人写的工程用vs2019加载 报错如下 一个错误 LNK1104 无法打开文件 boost thread vc14
  • Qt的各版本直接下载地址

    此文章转载自 http blog csdn net piaopiaolanghua article details 53153363 1 http download qt io archive qt 2 http ftp vim org l
  • spark机器学习笔记:设计机器学习系统

    感想 这是一篇机器学习通俗的讲解 我觉得讲得蛮好 特别是我们在设计机器学习系统的时候该怎么做 不是只设计一个机器学习算法就完了 还有很多的事情要做 本文对数据预处理归纳的挺全的 因为从用户获取的数据 不能直接用于机器学习模型的 中间还需要经
  • 上/下拉电阻对GPIO的影响

    疯雨 版权所有 转载请注明 http blog csdn net u010346967 本人菜鸟一枚 有错误的话欢迎指正 1 什么是上 下拉电阻 上拉就是将不确定的信号通过一个电阻嵌位在高电平 电阻同时起限流作用 下拉同理 上拉是对器件注入
  • 【Redis】Redis 通用命令、键的过期策略

    文章目录 一 基础命令 SET 和 GET 二 全局命令 KEYS EXISTS DEL EXPIRE 和 TTL 经典面试题 Redis 中 key 的过期策略是怎么实现的 TYPE Redis 有许多种数据结构 但是这些数据结构的 ke
  • Go中的Map实现机制

    Go中的Map实现机制 一 map的使用方式 初始化 func main 初始化方式一 make m make map string interface 10 初始化方式二 字面量初始化 m2 map string interface 增删
  • SphereEx张亮:“开源和商业化不能形成对立”

    开源创业 近两年在国内受到广泛关注 但是 想要挖掘一个开源项目的商业价值并非易事 开源创业也缺乏成功先例 那开源创业的道路该怎么走 本期 开源访谈录 邀请到了开源创业领域的探路者张亮与我们分享他的实践经验 本期受访嘉宾 张亮 SphereE
  • QT支持https及编译OpenSSL

    文章目录 搞懂Qt OpenSSL的具体原因 一 如何找到和自己Qt版本真正合适的库并编译 二 编译自己真正所需的OpenSSL库 1 下载OpenSSL 以我所需要的1 0 2o为例 2 配置编译环境及工具ActivePerl 2 1 由