OpenSSL

SSL 专栏收录该内容
1 篇文章 0 订阅

本节将对OpenSSL的结构、功能以及在Windows平台、Linux平台下的编译安装做一个简单的介绍。

OpenSSL---简介

OpenSSL是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2SSLv3TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。

OpenSSL采用C语言作为开发语言,这使得它具有优秀的跨平台性能。OpenSSL支持LinuxUNIXwindowsMac等平台。

OpenSSL---结构

第一次从openssl的官方网站下载了OPenSSL压缩包并解压到硬盘时,面对OpenSSL目录里面的众多目录和文件,感觉是一头雾水,不知从何下手。本节将对OpenSSL的这些目录结构做个大概介绍,对于了解OpenSSL做个基础。

OpenSSL---总体结构

Openssl软件包大体可以分为3个模块:密码算法库、SSL协议库以及应用程序。

Openssl的根目录下有许多文件,这些文件包含Openssl各个平台下的编译安装的说明文档、编译安装的配置文件以及Openssl本身版本变化的说明文档。例如以INSTALL*开头的都是基于不同平台的安装编译说明文件。格式为:INSTALL.平台。平台说明见图1-1

1-1 Openssl安装说明文件和相应的平台

Openssl中有一些目录不是很重要。例如MacOSNetwaremsos2VMS这几个目录,是不同的平台编译时候的环境变量配置文件。在安装编译完成后,这几个目录就失效了。Bugscertsperlshlibtimestoolsutils目录是一些辅助的目录,对实际学习OpenSSL是没有多大作用的,所以不用详细去研究它们。

Crypto目录是OpenSSL所有加密算法源码文件和一些PKI相关标准源码存放的目录(如X509源码文件)。包含了OpenSSL密码算法库的所有内容。是OpenSSL中最重要的目录。

SSL目录存放了SSL协议各个版本的实现源码(SSL2.0SSL3.0)以及TLS1.0的协议源码文件。包含了OpenSSL协议库的所有内容。

Doc目录是OpenSSL使用的说明文档存放的目录。包含三个部分:应用程序说明文档、加密算法库API说明文档以及SSL协议API说明文档。

APPs目录存放了OpenSSL所有应用程序的源代码文件。即OpenSSL中的各个命令的实现代码。

Demos目录OPenSSL应用的实例。主要由一些openSSL的爱好者写的应用实例的例子,在刚开始学习之前,可以研究研究。

Include目录存放了使用OpenSSL的库进行编程的时候可能需要使用到的一些头文件。

test目录存放了OpenSSL自身功能测试程序的源码文件。

如果在windows平台编译成功后,会增加三个目录:inc32outdll32以及tmp32dllinc32存放windows平台下使用OpenSSL进行编程要包含的头文件;outdll32存放了OpenSSL编译成功后的可执行应用程序、链接库LIB文件和动态DLL文件;tmp32dll则是在编译过程中存放OBJ等临时文件的目录;

OpenSSL---算法目录

OpenSSL算法目录Crypto目录包含了OpenSSL密码算法库的所有源代码实现文件,是OpenSSL中最重要的目录之一。OpenSSL的密码算法库包含了OpenSSL中所有密码算法、密钥管理和证书管理相关标准的实现。Crypto目录不仅仅包含了密码算法和标准的实现,还包含了OpenSSL本身的一些相关功能文件,例如BIOEVP等;

1-2Crypto子目录)列出了Crypto目录主要子目录的功能以及简单说明

Crypto根目录下还有一些文件,也是密码算法库的组成部分之一,由于不是很重要的部分,这里就不在一一介绍了。对OpenSSL提供的密码算法大概总结了一下:对称加密算法8种,非对称加密算法4中,信息摘要算法6种。

OpenSSL---文档目录

简单来说,OpenSSL文档目录doc提供的文档并不全面,并没有随着版本的更新而更新,但对刚刚接触OpenSSL的偏移来说,是个值得留念的地方,能够解决很多问题。

OpenSSL的文档使用Perl文档格式来保存,为.pod文件。在windows下,阅读文档可能有点困难,因为用写字板或者其它阅读器打开这些文档会显得格式非常凌乱。可以使用Perl工具pod2text或者pod2html命令将文档转换成txt文本格式或者html格式以方便阅读。

OpenSSL的文档分为三部分:应用程序说明文档(apps目录)、密码算法库API文档(crypto目录)以及SSL协议库API目录(ssl目录)。应用程序说明文档目录包含了大部分应用程序的使用(即命令行)和参数说明,并有相关的实例说明。密码算法库API文档包含了部分的密码算法库API说明(不全面)。SSL协议库目录包含了实现SSL协议以及TLS协议的大部分API的说明。OpenSSL目录下还有一个HOWTO目录,主要内容是证书的一些说明。

OpenSSL的功能

作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

密码算法库

OpenSSL中密码算法库的功能非常强大,它实现了现在密码学大部分主流的密码算法和标准,主要包括公开密钥(非对称)算法、对称加密算法、信息摘要算法、X509数字证书标准、PKCS12个人信息交换语法标准、PKCS#7加密消息语法标准、OCSP在线证书状态查询协议、CRL证书吊销列表等标准。OpenSSL还提供了Engine机制,利用Engine可以将加密卡、key等外部硬件算法模块无缝集成到OpenSSL中。密码算法库在Windows平台下编译后其库文件为libeay32.lib(如果编译成动态库则为ibeay32.dll),在linux编译后其库文件名称为libcrypto.a

对称加密算法

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

虽然每种对称加密算法都定义了自己的接口函数,但是在OpenSSL中还使用EVP封装了所有的对称加密算法,使得各种对称加密算法能够是用统一的API接口EVP_EncryptEVP_Decrypt进行数据的加密和解密,增加了代码的可重用性。

非对称加密算法

OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。EC算法既可以用于数字签名(即椭圆曲线数字签名算法ECDSA),也可用于密码交换(椭圆曲线密钥交换算法ECDH)

跟对称加密算法一样,OpenSSL也使用EVP封装了不同功能的非对称加密算法,提供了统一的API接口。如果使用非对称加密算法来进行数字签名,则使用EVP_SignEVP_Verify进行数字签名和验证;如果使用非对称加密算法来进行密钥加密和密钥交换,则使用EVP_SealEVP_Open进行加密和解密。

信息摘要算法

OpenSSL实现了6种信息摘要算法,分别是MD2MD4MD5MDC2SHASHA1)和RIPEMDSHA算法事实上包括了SHASHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSSDSS1

同上面两种算法一样,OpenSSL也使用EVP封装了信息摘要算法,它的接口是EVP_Digest。与上面不同的是,信息摘要算法是不可逆的。

密钥和证书管理

密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。

首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DERPEMBASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。

在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。

事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。

SSL协议

SSL协议完全实现和封装了SSL协议的3个版本(SSL1.0SSL2.0 SSL3.0)和TLS协议TLS1.0

SSL协议库是基于密码算法库的基础上实现的。利用该库,可以建立一个SSL通信服务器和客户端。该部分在Linux下编译后,文件名为libssl.a;在Windows下,则为ssleay.lib。(如果编译成动态库则为ssleay32.dll。)

虽然已经有众多的软件实现了OpenSSL的功能,但是OpenSSL里面实现的SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL协议是开放源代码的,我们可以追究SSL协议实现的每一个细节;二是OpenSSL实现的SSL协议是纯粹的SSL协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了SSL协议的本来面目。

应用程序

OpenSSL的应用程序已经成为了OpenSSL重要的一个组成部分,其重要性恐怕是OpenSSL的开发者开始没有想到的。现在OpenSSL的应用中,很多都是基于OpenSSL的应用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的应用程序实现的。OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的,所以也是一些非常好的OpenSSLAPI使用范例,读懂所有这些范例,你对OpenSSLAPI使用了解就比较全面了,当然,这也是一项锻炼你的意志力的工作。

OpenSSL的应用程序提供了相对全面的功能,在相当多的人看来,OpenSSL已经为自己做好了一切,不需要再做更多的开发工作了,所以,他们也把这些应用程序成为OpenSSL的指令。OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其它辅助配置功能。图1-3OpenSSL常用的命令表。

1-3 OpenSSL常用命令表

利用上面的命令可以完成很多操作。

Engine机制

Engine机制的出现是在OpenSSL0.9.6版的事情,开始的时候是将普通版本跟支持Engine的版本分开的,到了OpenSSL0.9.7版,Engine机制集成到了OpenSSL的内核中,成为了OpenSSL不可缺少的一部分。

 Engine机制目的是为了使OpenSSL能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。OpenSSLEngine机制成功地达到了这个目的,这使得OpenSSL已经不仅仅使一个加密库,而是提供了一个通用地加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备更OpenSSL协调工作,需要写少量的接口代码,但是这样的工作量并不大,虽然还是需要一点密码学的知识。Engine机制的功能跟Windows提供的CSP功能目标是基本相同的。

目前,OpenSSL0.9.7及其以上的版本支持的内嵌第三方加密设备有8种,包括:CryptoSwiftnCipherAtallaNuronUBSECAepSureWare以及IBM 4758 CCA的硬件加密设备。现在还出现了支持PKCS#11接口的Engine接口,支持微软CryptoAPI的接口也有人进行开发。当然,所有上述Engine接口支持不一定很全面,比如,可能支持其中一两种公开密钥算法。图1-4OpenSSL-0.9.7及其以上版本支持的硬件及其对应的简要描述名称,这个简要描述名称在很多时候是要使用的,如编程或执行命令的时候,简要密钥名称是大小写敏感的,目前一般都是采用小写字符。

1-4 OpenSSL-0.9.7及其以上版本支持的硬件及其对应的简要描述名称

辅助功能

前面介绍了OpenSSL的大部分功能,如果你第一次接触OpenSSL而又对密码学技术有所了解,这些功能相信会让你激动不已,如果你愿意,OpenSSL其实还有一些能让你高兴的地方。

首先最值的一提的就是OpenSSLBIO机制。BIO机制是OpenSSL提供的一种高层IO接口,该接口封装了几乎所有类型的IO接口,如内存访问、文件访问以及Socket等。这使得代码的重用性大幅度提高,OpenSSL提供API的复杂性也降低了很多。前面介绍的EVP封装也提高了OpenSSL代码的可重用性。

从前面应用程序的介绍就可以得知,OpenSSL对于随机数的生成和管理也提供了一整套的解决方法和支持API函数。随机数的好坏是决定一个密钥是否安全的重要前提,OpenSSL给我提供了这么一个解决方案,虽然不一定在所有的应用中都能令人满意。

OpenSSL还提供了其它的一些辅助功能,如从口令生成密钥的API,证书签发和管理中的配置文件机制等等。如果你有足够的耐心,将会在深入使用OpenSSL的过程慢慢发现很多这样的小功能,让你不断有新的惊喜。

OpenSSL的优缺点

OpenSSL具有以下优点:

Ø  采用C语言开发,支持多种操作系统,可移植性好。

Ø  功能全面,支持大部分主流密码算法、相关标准协议和SSL协议。

Ø  开放源代码,应用者能很好的了解其算法的实现过程。

Ø  有应用程序(即OpenSSL指令),既可以直接使用,也可以进行二次开发。

Ø  免费使用,能够用于商业和非商业。

当然,OpenSSL也存在以下的缺点:

Ø  代码采用C语言开发,结构复杂庞大,向剥离部分功能比较困难。

Ø  文档不全面,增加了使用的困难性。

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了易用的一键式设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。在常规修复过程中,程序还会自动检测DirectX加速状态,在异常时给予用户相应提示。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V4.0版分为标准版、增强版以及在线修复版。所有版本都支持修复DirectX的功能,而增强版则额外支持修复c++的功能。在线修复版功能与标准版相同,但其所需的数据包需要在修复时自动下载。各个版本之间,主程序完全相同,只是其配套使用的数据包不同。因此,标准版和在线修复版可以通过补全扩展包的形式成为增强版。本程序自V3.5版起,自带扩展功能。只要在主界面的“工具”菜单下打开“选项”对话框,找到“扩展”标签,点击其中的“开始扩展”按钮即可。扩展过程需要Internet连接,扩展成功后新的数据包可自动生效。扩展用时根据网络速度不同而不同,最快仅需数秒,最慢需要数分钟,烦请耐心等待。如扩展失败,可点击“扩展”界面左上角小锁图标切换为加密连接,即可很大程度上避免因防火墙或其他原因导致的连接失败。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有更新系统c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。除常规修复外,新版程序还支持C++强力修复功能。当常规修复无效时,可以到本程序的选项界面内开启强力修复功能,可大幅提高修复成功率。请注意,请仅在常规修复无效时再使用此功能。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 新版程序支持命令行运行模式。在命令行中调用本程序,可以在路径后直接添加命令进行相应的设置。常见的命令有7类,分别是设置语言的命令、设置窗口模式的命令,设置安全级别的命令、开启强力修复的命令、设置c++修复模式的命令、控制Direct加速的命令、显示版权信息的命令。具体命令名称可以通过“/help”或“/?”进行查询。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了7项高级功能。点击"常规”选项卡可以调整程序的基本运行情况,包括日志记录、安全级别控制、调试模式开启等。只有开启调试模式后才能在C
第一章 基础知识 81.1 对称算法 81.2摘要算法 81.3 公钥算法 91.4 回调函数 11第二章 openssl简介 132.1 openssl简介 132.2 openssl安装 132.2.1 linux下的安装 132.2.2 windows编译与安装 132.3 openssl源代码 142.4 openssl学习方法 16第三章openssl堆栈 173.1 openssl堆栈 173.2 数据结构 173.3 源码 173.4 定义用户自己的堆栈函数 183.5 编程示例 19第四章 openssl哈希表 214.1 哈希表 214.2 哈希表数据结构 214.3 函数说明 224.4 编程示例 24第五章 openssl内存分配 275.1 openssl内存分配 275.2 内存数据结构 275.3 主要函数 285.4 编程示例 28第六章 Openssl动态模块加载 316.1 动态库加载 316.2 DSO概述 316.3 数据结构 316.4 编程示例 32第七章 openssl抽象IO 357.1 openssl抽象IO 357.2 数据结构 357.3 BIO 函数 367.4 编程示例 377.4.1 mem bio 377.4.2 file bio 377.4.3 socket bio 387.4.4 md BIO 407.4.5 cipher BIO 407.4.6 ssl BIO 417.4.7 其他示例 43第八章 Openssl配置文件 448.1 概述 448.2 openssl配置文件读取 448.3 主要函数 448.4 编程示例 45第九章 Openssl随机数 479.1 随机数 479.2 openssl随机数数据结构与源码 479.3 主要函数 489.4 编程示例 49第十章 Openssl文本数据库 5110.1 概述 5110.2 数据结构 5110.3 函数说明 5210.4 编程示例 52第十一章 Openssl大数 5511.1 介绍 5511.2 openssl大数表示 5511.3 大数函数 5511.4 使用示例 58第十二章 Openssl base64编解码 6512.1 BASE64编码介绍 6512.2 BASE64编解码原理 6512.3 主要函数 6612.4 编程示例 66第十三章 Openssl ASN1库 6913.1 ASN1简介 6913.2 DER编码 7013.3 ASN1基本类型示例 7113.4 openssl 的ASN.1库 7313.5 用openssl的ASN.1库DER编码 7413.6 Openssl的ASN.1宏 7513.7 ASN1常用函数 7613.8 属性证书编码 90第十四章 Openssl错误处理 9414.1 概述 9414.2 数据结构 9414.3 主要函数 9614.4 编程示例 98第十五章 Openssl摘要与HMAC 10115.1 概述 10115.2 openssl摘要实现 10115.3 函数说明 10115.4 编程示例 10215.5 HMAC 103第十六章 Openssl数据压缩 10516.1 简介 10516.2 数据结构 10516.3 函数说明 10616.4 openssl中压缩算法协商 10616.5 编程示例 107第十七章 Openssl RSA 10817.1 RSA介绍 10817.2 openssl的RSA实现 10817.3 RSA签名与验证过程 10917.4 数据结构 10917.4.1 RSA_METHOD 10917.4.2 RSA 11017.5 主要函数 11117.6编程示例 11217.6.1密钥生
【版权声明】<br>本openssl的VC软件包由王志海(DragonKing)根据openssl整理提供,Eric Young's拥有对所有源代码的最终版权,一切应用应该遵照openssl的声明。该版本为openssl-0.9.6h<br>欢迎联系本人或提意见:<br>Email:wzhah@263.net<br>HomePage: http://gdwzh.126.com[openssl中文专业论坛,提供大量中文资料]<br>【功能说明】<br>本软件包将每个openssl的apps程序做成一个可直接运行调试的VC Console 类型应用程序,方便研究和运用openssl的朋友,避免了openssl在windows下的编译问题,并且因为可以在VC环境下进行调试,使得对openssl的各个应用程序的流程更容易理解,这对openssl初学者尤其方便。希望大家多提意见。<br>【使用说明】<br>要正确使用该工程文件,呢应该从http://gdwzh.126.com获取如下目录和文件:<br>1.Windows平台下openssl动态库,包含两个dll文件,将他们拷贝到Windows/system32目录下;<br>2.Windows平台下openssl静态库,下载解压后得到一个名为lib的文件夹,包含两个lib文件;<br>3.openssl的头文件,下载解压后得到一个名为include的录。<br>4.Windows平台rsa项目文件,下载解压后得到一个名为rsa的目录,里面包含了项目主文件;<br>5.将目录lib、include、和rsa拷贝到同一个目录下;<br>6.完成上述步骤,就可以像普通的VC项目一样进行调试编译了,有任何问题,请到http://openssl.126.com提问。<br>【注意】<br>1.获取最新信息请到http://gdwzh.126.com的openssl专业论坛.<br>2.编译好的运用程序有可能需要其它的openssl文件支持,如openssl.cnf等,请参照openssl相关文档或本站信息公布。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

TonyChan

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值