OpenSSL目录名以及功能描述目录名功能描述Crypto存放OpenSSL所有加密算法源码文件和相关标注如X.509源码文件,是OpenSSL中最重要的目录,包含了OpenSSL密码算法库的所有内容。SSL存放OpenSSL中SSL协议各个版本和TLS1.0协议源码文件,包含了OpenSSL协议库的所有内容。Apps存放OpenSSL中所有应用程序源码文件,如CA、X509等应用程序的源文件就存放在这里。Doc存放了OpenSSL中所有的使用说明文档,包含三个部分:应用程序说明文档、加密算法库API说明文档以及SSL协议API说明文档。Demos存放了一些基于OpenSSL的应用程序例子,这些例子一般都很简单,演示怎么使用OpenSSL其中的一个功能。Include存放了使用OpenSSL的库时需要的头文件。Test存放了OpenSSL自身功能测试程序的源码文件OpenSSL算法目录OpenSSL的算法目录Crypto目录包含了OpenSSL密码算法库的所有源代码文件,是OpenSSL中最重要的目录之一。OpenSSL的密码算法库包含了OpenSSL中所有密码算法、密钥管理和证书管理相关标准的实现,在Windows下编译后的库文件名为libeay32.lib,在Linux下编译后生产的库文件名为libcrypto.a。Crypto目录下包含了众多的子目录,这些目录大多数以相关的算法或标准名称的简写命名。当然,并非所有这些目录存放的源文件都是密码算法和标准,有些是OpenSSL本身的一些相关功能文件,如BIO、DSO和EVP等。Crypto子目录列表AES对称算法,美国新的对称加密算法标准AES算法源码。Bf对称算法,Blowfish对称加密算法源码。Cast对称算法,CAST对称加密算法源码。Des对称算法,包括了DES和3DES对称加密算法源码。Idea对称算法,IDEA对称加密算法源码。Rc2对称算法,RC2对称加密算法源码。Rc4对称算法,RC4对称加密算法源码Rc5对称算法,RC5对称加密算法源码。Dh非对称算法,DH非对称密钥交换算法源码。Dsa非对称算法,DSA非对称算法源码,用于数字签名。Ec非对称算法,EC椭圆曲线算法源码。Rsa非对称算法,RSA非对称加密算法源码,既可以用于密钥交换,也可以用于数字签名。Md2信息摘要算法,MD2信息摘要算法源码。Md5信息摘要算法,MD5信息摘要算法源码。Mdc2信息摘要算法,MDC2信息摘要算法源码。Sha信息摘要算法,SHA信息摘要算法源码,包括了SHA1算法。Ripemd信息摘要算法,RIPEMD-160信息摘要算法源码。Comp数据压缩算法数,数据压缩算法的函数接口,目前没有压缩算法,只是定义了一些空的接口函数Asn1PKI相关标准ASN.1标准实现源码,只实现了PKI相关的部分,不是完全实现。包括DER编解码等功能。OcspPKI相关标准OCSP(在线证书服务协议)实现源码。PemPKI相关标准PEM标准实现源码,包括了PEM的编解码功能。Pkcs7PKI相关标准PKCS#7标准实现源码。PKCS#7是实现加密信息封装的标准,包括了证书封装的标准和加密数据的封装标准。Pkcs12PKI相关标准PKCS#12标准实现源码。包括了PKCS#12文件的编解码功能。PKCS#12是一种常用的证书和密钥封装格式。X509PKI相关标准X.509标准的实现源码。包括了X.509的编解码功能,证书管理功能等。X509v3PKI相关标准X.509第三版扩展功能的实现源码。对称加密算法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进行签名和验证。信息摘要算法OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA1和SHA256两种信息摘要算法,此外,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接口,BIO封装了几乎所有类型的IO接口,如内存访问、文件访问以及Socket等。这使得代码的重用性大幅度提高,OpenSSL提供API的复杂性也降低了很多。