若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/117503951

长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:三方库开发技术

前言

  Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持.。

OpenSSL

介绍

  OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。
  SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
  SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

特点

安全信道特性

  • 数据保密性
      信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。
  • 数据完整性
      加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。
  • 安全验证
      加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。
      OpenSSL包含一个命令行工具用来完成OpenSSL库中的所有功能,更好的是,它可能已经安装到你的系统中了。
      OpenSSL是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,但是,你不应该只将其作为一个库来使用,它还是一个多用途的、跨平台的密码工具。

开源特点

  Eric A. Young和Tim J. Hudson自1995年开始编写后来具有巨大影响的OpenSSL软件包,这是一个没有太多限制的开放源代码的软件包。Eric A. Young 和Tim J. Hudson是加拿大人,后来由于写OpenSSL功成名就之后就到大公司里赚大钱去了。1998年,OpenSSL项目组接管了OpenSSL的开发工作,并推出了OpenSSL的0.9.1版,到目前为止,OpenSSL的算法已经非常完善,对SSL2.0、SSL3.0以及TLS1.0都支持。
  OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得OpenSSL具有广泛的适用性。但习惯C语言总比使用C++重新写一个跟OpenSSL相同功能的软件包轻松不少。

功能

基本功能

  OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
  作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

辅助功能

  BIO机制是OpenSSL提供的一种高层IO接口,该接口封装了几乎所有类型的IO接口,如内存访问、文件访问以及Socket等。这使得代码的重用性大幅度提高,OpenSSL提供API的复杂性也降低了很多。
  OpenSSL对于随机数的生成和管理也提供了一整套的解决方法和支持API函数。随机数的好坏是决定一个密钥是否安全的重要前提。
  OpenSSL还提供了其它的一些辅助功能,如从口令生成密钥的API,证书签发和管理中的配置文件机制等等。如果你有足够的耐心,将会在深入使用OpenSSL的过程慢慢发现很多这样的小功能,让你不断有新的惊喜。

算法

密钥证书管理

  密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。
  首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。
  在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。
  事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。
  OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协议。 OpenSSL也实现了TLSv1.0,TLS是SSLv3的标准化版,虽然区别不大,但毕竟有很多细节不尽相同。
  虽然已经有众多的软件实现了OpenSSL的功能,但是OpenSSL里面实现的SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL协议是开放源代码的,我们可以追究SSL协议实现的每一个细节;二是OpenSSL实现的SSL协议是纯粹的SSL协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了SSL协议的本来面目。

对称加密

  OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。

非对称加密

  OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
信息摘要
  OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法。此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。

下载OpenSSL

  官网:http://distfiles.macports.org/openssl/
  
  CSDN:https://download.csdn.net/download/qq21497936/11537079
  QQ群:1047134658(点击“文件”搜索“openssl”,群内与博文同步更新)

编译OpenSSL

安装windows下linux编译环境msys

  
  将qt的mingw和本机的perl拷贝到msys文件夹下,然后添加路径
  

配置OpenSSL

   配置安装路径
  
  
  此处卡了一个多小时,各种找原因,原来是需要使用msys而不是msys2
  
  

修改Makefile

  在最上层Makefile找到变量PERL
  直接修改如下图:
  
  继续mingw32-make.exe
  
  漫长的等待后,继续报错
  
  仔细看是应用的问题,链接库失败可能是,但是我们需要的
  查看编译出的库
  

添加配置参数

  其实测试程序编译缺少库是路径包含问题,多次尝试,还是需要config的时候指定下路径

./config --prefix=/usr/local --openssldir=/usr/local/openssl

编译

mingw32-make.exe install -j4

  编译成功,编译过程和安装过程都很漫长,估计得二三十分钟
  
  顺利编译,此时为了方便提取库修改配置如下

./config --prefix=/home/yang/complie/install  \--openssldir=/home/yang/complie/install/openssl

  试几次,有可能会出现错误,多线程导致一些前后依赖的错误

mingw32-make.exe install -j4

  议最后执行一次:

mingw32-make.exe install

  成功后如下:
  
  可以测试以下:

Mingw32-make.exe test

  
  时间也是非常长。

Install文件结构打包

  编译出来的是静态库(注意:笔者重头再来一遍,配置时加了shared参数也还是静态库)。
  

入坑

入坑一:Perl调用失败

  

解决方法

  修改顶层Makefile的Perl。
  

入坑二:配置时操作系统类型错误

  

解决方法

由msys2更换为msys1.0。

入坑三:编译时,找不到库定义

  

解决方法

  配置时,需要加2个参数。
  

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/117503951

Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化相关推荐

  1. Qt开发笔记之Qwt(一):Qwt介绍、编译与Demo

    若该文为原创文章,未经允许不得转载 原博主博客地址:长沙红胖子_长沙红胖子网络科技有限公司_CSDN博客 原博主博客导航:红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术.树莓派.三维.Op ...

  2. Qt之手写识别开发笔记:Zinnia介绍、编译、使用以及Demo

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  3. Qt开发笔记之Qwt(二):Qwt仪表盘的基本使用

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  4. Qt开发笔记(一):Qt+FFmpeg开发环境搭建以及工程模板

    原博主博客地址:https://blog.csdn.net/qq21497936 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/90 ...

  5. Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/120979753 长期持续带来更多技术分享,定制咨询QQ ...

  6. 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget

    本节对应的视频讲解:B_站_链_接 QTableWidget 是 Qt 中的表格控件,可以行列的形式来展示数据 1. 属性和方法 QTableWidget 有很多属性和方法,完整的可查看帮助文档. 在 ...

  7. QT开发的软件在新电脑上打开报错

    QT开发的软件在新电脑上打开报错 之前用QT开发的一个尿素泵总成电检台测试软件,拷贝到别的电脑上,运行时出现"Cannot load xxx.dll"的警告,于是想办法找各种解决办 ...

  8. RK3568开发笔记(四):在虚拟机上使用SDK编译制作uboot、kernel和buildroot镜像

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/125844240 红胖子网络科技博文大全:开发技术集合( ...

  9. RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/127783966 红胖子网络科技博文大全:开发技术集合( ...

  10. 【Qt开发笔记】Windows(VS2015或Mingw)环境编译Marble地图库

    Windows(VS2015+Qt或Mingw+Qt)环境编译Marble开源地图库 0.Mable介绍与源码下载 1.VS2015编译Marble 2.Mingw编译Marble 0.Mable介绍 ...

最新文章

  1. android8显示广播,关于android8.0静态接收广播
  2. LIST组件使用总结
  3. mysql 5.7.13安装_安装MySQL 5.7.13
  4. 计算机图形学二维变换知识点,计算机图形学 二维变换及二维.ppt
  5. 示波器1m和50欧姆示阻抗匹配_阻抗匹配,示波器,50欧姆电阻,他们之间是什么关系?(第一回)...
  6. 构建企业数字化转型协同力有多难?青云发布workly.ai誓要解决这些棘手的问题!...
  7. parseFloat(string)
  8. kafka 创建topic_Kafka试题
  9. 数仓dw怎么建_从0建设离线数据仓库
  10. python入门指南 许半仙-《猛一相亲指南》TXT全本 百度云网盘下载 by许半仙
  11. (转载)图文推荐给开发人员非常实用的站点
  12. Visualize real-time data streams with Gnuplot
  13. selenium+ocr 破解验证码
  14. Symbian证书级别对应功能
  15. 百乐达斯城全新梦幻主题乐园幻乐堡在韩国开业
  16. 赠人玫瑰,手有余香, 下面请听仙居义工专题报道
  17. 怎样将vob格式转换成avi高清视频格式
  18. 章文嵩:开源,LVS,以及留下的无数传说
  19. 计算机网络应用基础心得体会,计算机网络技术学习心得体会
  20. 程序员面试之九阴真经

热门文章

  1. qpsk的映射过程_qpsk原理
  2. ipad mini2降级刷10.3.3系统教程
  3. 网站服务器mine类型设置,windows服务器如何配置MIME类型
  4. win7修复音频服务器,win7系统下realtek高清晰音频管理器没有声音怎么修复
  5. 炒币之止损止盈控制的艺术、投资入门
  6. 几年前运放有源滤波器设计思考点
  7. Apple Magic Mouse 卡顿的问题
  8. mhdd硬盘测试软件,mhdd硬盘检测工具使用攻略 mhdd硬盘检测工具如何使用
  9. 简易nginx load balance示例
  10. weka与mysql相连_Weka与MySQL连接配置