OpenSSL简介
功能作用:SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版。TLS(Transport Layer Security)是IETF的TLS 工作组在SSL3.0基础之上提出的安全通信标准,目前版本是1.0,即RFC2246。SSL/TLS提供的安全机制可以保证应用层数据在互联网络传输不被监听、伪造和窜改。
内部包含什么:它是一个健全的、商业级的、全开放的和开放源代码的工具包,实现安全套接层协议(SSL v2/v3)和传输层安全协议(TLS v1)以及形成一个功效完整的通用目的的加密技术库。openssl sslv2、sslv3、tlsv1的一份完整实现,内部包含了大量加密算法程序.其应用程序提供了丰富的加密、验证、证书生成等功能,甚至可以用它建立一个完整的CA。同时,它也提供了一套完整的库函数,可用开发用SSL/TLS的通信程序。Apache的https两种版本 mod_ssl和apachessl均基于它实现的。
缺点:openssl 的缺点是文档太少,连一份完整的函数说明都没有,man page也至今没做完整,如果想用它编程序,除了熟悉已有的文档(包括 ssleay,mod_ssl,apachessl的文档)外,可以到它的maillist上找相关的帖子,许多问题可以在以前的文章中找到答案。
优点:OpenSSL 采用 C 语言作为开发语言,这使得 OpenSSL 具有优秀的跨平台性能。OpenSSL 支持 Linux、Windows、BSD、Mac、VMS 等平台,这使得 OpenSSL 具有广泛的适用性。Openssl是开源的,对于程序员来说,openssl所有的技术实现细节都是可见的。 Openssl的核心加密库ssleay涉及范围广,功能齐全,逻辑合理。打破了美国不允许强加密产品出口的限制 。
OpenSSL目录
整个软件包可大概分为三个主要功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL 的目录结构是围绕这三个功能部分进行规划的。
OpenSSL 的根目录下的文件包含OpenSSL各个平台下编译安装的说明文档、编译安装的配置文件以及OpenSSL本身版本变化的一些说明文档。诸如INSTALL.*这样名称的文件,都是安装编译说明文件,后缀名是平台的名称。比如INSTALL.w32,就是Windows平台的OpenSSL安装编译说明文件。只有Linux的安装编译说明文件是不带后缀的,就是INSTALL。
目录名 |
功能描述 |
Crypto |
存放OpenSSL 所有加密算法源码文件和相关标注如X.509 源码文件,是OpenSSL 中最重要的目录,包含了OpenSSL 密码算法库的所有内容。 |
存放OpenSSL 中SSL 协议各个版本和TLS 1.0 协议源码文件,包含了OpenSSL 协议库的所有内容。 |
|
Apps |
存放OpenSSL 中所有应用程序源码文件,如CA、X509 等应用程序的源文件就存放在这里。 |
Doc |
存放了OpenSSL 中所有的使用说明文档,包含三个部分:应用程序说明文档、加密算法库API说明文档以及SSL 协议API 说明文档。 |
Demos |
存放了一些基于OpenSSL 的应用程序例子,这些例子一般都很简单,演示怎么使用OpenSSL其中的一个功能。 |
Include |
存放了使用OpenSSL 的库时需要的头文件。 |
Test |
存放了OpenSSL 自身功能测试程序的源码文件 |
对称加密算法
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 还使用EVP 封装了所有的对称加密算法,使得各种对成加密算法能够使用统一的API 接口EVP_Encrypt 和EVP_Decrypt 进行数据的加密和解密,大大提供了代码的可重用性能。
非对称加密算法
OpenSSL 一 共实现了4 种非对称加密算法,包括DH 算法、RSA 算法、DSA 算法和椭圆曲线算法(EC)。DH 算法一般用户密钥交换。RSA 算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA 算法则一般只用于数字签名。
跟 对称加密算法相似,OpenSSL 也使用EVP 技术对不同功能的非对称加密算法进行封装,提供了统一的API 接口。如果使用非对称加密算法进行密钥交换或者密钥加密,则使用EVP_Seal 和EVP_Open 进行加密和解密;如果使用非对称加密算法进行数字签名,则使用EVP_Sign 和EVP_Verify 进行签名和验证。
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
信息摘要算法
OpenSSL 实现了5 种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA 算法事实上包括了SHA 和SHA1 两种信息摘要算法,此外,OpenSSL 还实现了DSS 标准中规定的两种信息摘要算法DSS 和DSS1。
OpenSSL 采用EVP_Digest 接口作为信息摘要算法统一的EVP 接口,对所有信息摘要算法进行了封装,提供了代码的重用性。
密钥和证书管理
密钥和证书管理是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),实现了证书签发的整个流程和证书管理的大部分机制。
Engine 机制
Engine 机制的出现是在OpenSSL 的0.9.6 版的事情,开始的时候是将普通版本跟支持Engine 的版本分开的,到了OpenSSL 的0.9.7 版,Engine 机制集成到了OpenSSL 的内核中,成为了OpenSSL 不可缺少的一部分。
Engine 机 制目的是为了使OpenSSL 能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。OpenSSL 的Engine 机制成功地达到了这个目的,这使得OpenSSL 已经不仅仅使一个加密库,而是提供了一个通用地加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备更OpenSSL 协调工作,需要写少量的接口代码,但是这样的工作量并不大,虽然还是需要一点密码学的知识。Engine 机制的功能跟Windows 提供的CSP 功能目标是基本相同的。
BIO 机制
BIO 机制是OpenSSL 提供的一种高层。
IO 接口,该接口封装了几乎所有类型的IO 接口,如内存访问、文件访问以及Socket 等。这使得代码的重用性大幅度提高,OpenSSL 提供API 的复杂性也降低了很多。
OpenSSL编译安装
1.下载/安装perl,和下载/解压openssl-1.0.1e.tar.gz。编译openssl必须要安装perl,这个是在openssl的readme文件中强调的,当然,实际编译过程中也却是需要。(Perl是一种高级、通用、直译式、动态的程序语言。Perl教程)
2.按照openssl-1.0.1e文件夹下的INSTALL.w32文件描述来编译。首先,进入到openssl-1.0.1e文件夹目录下
- > perl Configure VC-WIN32 --prefix=c:\some\openssl\dir --prefix是你在最后一步进行openssl的安装的时候openssl的安装目录
- > ms\do_nasm -----执行ms目录下的do_ms文件
进入到VC++开发环境目录下,如:D:\devInstallPath\Microsoft Visual Studio 10.0\VC\bin
- > nmake -f ms\ntdll.mak
- > nmake -f ms\ntdll.mak test
- > nmake -f ms\ntdll.mak install