关于openssl:Qt开发笔记OpenSSL库介绍windows上mingw32版本的OpenSSL编译模块化

14次阅读

共计 4380 个字符,预计需要花费 11 分钟才能阅读完成。

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

红瘦子 (红模拟) 的博文大全:开发技术汇合(蕴含 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

正文完
 0