OpenSSL学习心得

OpenSSL学习心得
                       
经过一段时间的学习,我对OpenSSL有了初步了解。下面是摘录和整理的一些内容,并对开发团队如何利用OpenSSL谈了一些自己的看法,供各位参考、讨论。
1 OpenSSL的由来及现状
OpenSSLSSL协议的产品实现。它由加拿大人Eric A. YoungTim J. Hudson发起设计的,他们自1995年开始编写后来具有巨大影响的OpenSSL软件包,这是一个没有太多限制的开放源代码的软件包,可以利用这个软件包做很多事情。1998年,OpenSSL项目组接管了OpenSSL的开发工作,并推出了OpenSSL0.9.1版,到目前为止,OpenSSL的算法已经非常完善,对SSL2.0SSL3.0以及TLS1.0都支持。OpenSSL目前最新的版本是2005531日发布的0.9.8 Beta 3版。现在可以说OpenSSL项目是由全世界范围内志愿者组成的团体一起管理,他们使用Internet去交流、设计和开发这个OpenSSL工具和相关的文档。
OpenSSL采用C语言作为开发语言,使得OpenSSL具有优秀的跨平台性能,这对于广大技术
人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持LinuxWindowsBSDMacVMS等平台,这使得OpenSSL具有广泛的适用性。OpenSSL的源代码库可以从OpenSSL自由下载,并可以免费用于任何商业或非商业的目的。许多类型的软件中的安全部分都使用了OpenSSL的库,如VOIPOpenH323协议、Apache服务器、Linux安全模块等等。
2 OpenSSL功能
作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
2.1 对称加密算法
OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AESDESBlowfishCASTIDEARC2RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(金折网CFB)和
输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。
虽然每种加密算法都定义了自己的接口函数,但是OpenSSL还使用EVP封装了所有的对称加密算法,使得各种对称加密算法能够使用统一的API接口EVP_EncryptEVP_Decrypt进行数据的加密和解密,大大提供了代码的可重用性能。
2.2 非对称加密算法
OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
跟对称加密算法相似,OpenSSL也使用EVP技术对不同功能的非对称加密算法进行封装,提供了统一的API接口。如果使用非对称加密算法进行密钥交换或者密钥加密,则使用EV
P_SealEVP_Open进行加密和解密;如果使用非对称加密算法进行数字签名,则使用EVP_SignEVP_Verify进行签名和验证。
2.3 信息摘要算法
OpenSSL实现了5种信息摘要算法,分别是MD2MD5MDC2SHASHA1)和RIPEMDSHA算法事实上包括了SHASHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS捞泥DSS1
OpenSSL采用EVP_Digest接口作为信息摘要算法统一的EVP接口,对所有信息摘要算法进行了封装,提供了代码的重用性。当然,跟对称加密算法和非对称加密算法不一样,信息摘要算法是不可逆的,不需要一个解密的逆函数。
2.4 密钥和证书管理
密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。
首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DERPEMBASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。
在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及线性排水沟施工图PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。
事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。
2.5 SSLTLS协议
虽然已经有众多的软件实现了OpenSSL的功能,但是OpenSSL里面实现的经络拍SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL
议是开放源代码的,我们可以追究SSL协议实现的每一个细节;二是OpenSSL实现的SSL协议是纯粹的SSL协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了SSL协议的本来面目。由于SSL协议现在经常跟HTTP协议在一起应用形成HTTPS协议,所以给很多人误认为SSL协议就是为了保护Web安全性的,这实在是一个很大的误解!
OpenSSL实现了SSL协议的SSLv2SSLv3,支持了其中绝大部分算法协议。OpenSSL也实现了TLSv1.0TLSSSLv3的标准化版,虽然区别不大,但毕竟有很多细节不尽相同。OpenSSL除了提供了使用SSL协议和TLS协议的API接口函数之外,还提供了两个不错的应用程序S_ClientS_ServerS_Client用来模拟SSL客户端,可以用来测试SSL服务器,比如IIS和带mod_sslApache等;而S_Server模拟了一个SSL服务器,可以用来测试SSL客户端,比如IENetscape等。事实上,由于是开放源代码的,S_ClientS_Server程序的源代码还是很好的OpenSSLSSL接口API使用例子。
2.6 应用程序
OpenSSL的应用程序已经成为了OpenSSL重要的一个组成部分,其重要性恐怕是OpenSSL的开发者开始没有想到的。现在OpenSSL的应用中,很多都是基于OpenSSL
应用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的应用程序实现的。OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的,所以也是一些非常好的OpenSSLAPI使用范例,读懂所有这些范例,你对OpenSSLAPI使用了解就比较全面了,当然,这也是一项锻炼你的意志力的工作。
OpenSSL的应用程序提供了相对全面的功能,在相当多的人看来,OpenSSL已经为自己做好了一切,不需要再做更多的开发工作了,所以,他们也把这些应用程序成为OpenSSL的指令。OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、温调节SSL测试以及其它辅助配置功能。
2.7 Engine机制
Engine机制的出现是在OpenSSL0.9.6版的事情,开始的时候是将普通版本跟支持Engine的版本分开的,到了OpenSSL0.9.7版,Engine机制集成到了OpenSSL的内核中,成为了OpenSSL不可缺少的一部分。
Engine机制目的是为了使OpenSSL能够透明地使用第三方提供的软件加密库或者硬件加密
设备进行加密。OpenSSLEngine机制成功地达到了这个目的,这使得OpenSSL已经不仅仅是一个加密库,而是提供了一个通用地加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备跟OpenSSL协调工作,需要写少量的接口代码,但是这样的工作量并不大,虽然还是需要一点密码学的知识。Engine机制的功能跟Windows提供的CSP功能目标是基本相同的。
2.8 辅助功能
前面介绍了OpenSSL的大部分功能,如果你第一次接触OpenSSL而又对密码学技术有所了解,这些功能相信会让你激动不已,如果你愿意,OpenSSL其实还有一些能让你高兴的地方。
首先最值的一提的就是OpenSSLBIO机制。BIO机制是高梁红OpenSSL提供的一种高层IO接口,该接口封装了几乎所有类型的IO接口,如内存访问、文件访问以及Socket等。这使得代码的重用性大幅度提高,OpenSSL提供API的复杂性也降低了很多。前面介绍的EVP封装也提高了OpenSSL代码的可重用性。
从前面应用程序的介绍就可以得知,OpenSSL对于随机数的生成和管理也提供了一整套的解决方法和支持API函数。随机数的好坏是决定一个密钥是否安全的重要前提,OpenSSL给我提供了这么一个解决方案,虽然不一定在所有的应用中都能令人满意。
OpenSSL还提供了其它的一些辅助功能,如从口令生成密钥的API,证书签发和管理中的配置文件机制等等。如果你有足够的耐心,将会在深入使用OpenSSL的过程慢慢发现很多这样的小功能,让你不断有新的惊喜。
3 OpenSSL应用
OpenSSL的应用一般可以分为两种不同的方式:基于OpenSSL指令的应用和基于OpenSSL加密库和协议库的应用。前者更容易一些,而后者需要做的工作更多一些。当然,这些应用不一定是截然分开的,你当然可以两种都用一点,比如使用SSL协议的API,但是证书可以使用OpenSSL的指令签发。

本文发布于:2024-09-23 18:31:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/155241.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:密钥   证书   加密
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议