4.1 openssl结构
4.1.1 Openssl总体结构
Openssl整个软件包大概可以分成三个主要功能部分:密码算法库、SSL协议库及应用程序
目录名 | 功能描述 |
crypto | 存放Openssl所有加密算法源码文件和相关标准如X509源码文件, 是Openssl 中最重要的目录,包含了Openssl密码算法库的所有内容 |
SSL | 存放Openssl中SSL协议各个版本和TLS1.0协议源码文件,包含了Openssl 协议库的所有内容 |
Apps | 存放Openssl中所有应用程序员文件, 如ca、x509等应用有的源文件就存放在这里 |
Doc | 存放了Openssl中所有的使用文档,包含三个部分:应用程序说明文档、 加密算法库API说明文档及SSL协议API说明文档 |
Demos | 存放了一些基于Openssl的应用程序例子,这些例子一般很简单, 演示怎么使用Openssl其中一个功能 |
Include | 存放了使用Openssl的库时需要的头文件 |
Test | 存放Openssl自身功能测试程序的源码文件。 |
4.1.2 Openssl算法目录
目录名称 | 目录类型 | 内容或功能描述 |
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 | 数据压缩算法 | 数据牙酸算法的函数接口,目前没有压缩算法, 只是定义了一些空的借口函数 |
asn1 | PKI相关标准 | ASN.1标准实现源码,只实现了PKI相关的部分, 不是完全实现,包括DER编解码等功能 |
ocsp | PKI相关标准 | OCSP(在线证书服务协议)实现源码 |
pem | PKI相关标准 | PEM标准实现源码,包括了PEM的编解码功能 |
pkcs7 | PKI相关标准 | PKCS#7标准实现源码。PKCS#7是实现加密信息封装的标准, 包括了证书封装的标准和加密数据的封装标准 |
pkcs12 | PKI相关标准 | PKCS#12 标准实现源码。包括了PKCS#12文件的编解码功能。 PKCS#12是一种常用的证书和密钥封装格式 |
x509 | PKI相关标准 | X509标准的实现源码 |
x509v3 | PKI相关标准 | X509第三版扩展功能的实现源码 |
krb5 | 其他标准支持 | 支持Kerberos协议的一些接口函数和结构定义 |
hmac | 其他标准支持 | HMAC标准的支持接哦古和函数源码 |
lhash | 其他标准支持 | 动态HASH表结构和函数源码 |
bio | 自定义 | openssl自身定义的一种抽象IO接口, 封装了各种平台的几乎所有IO接口, 如文件、内存、缓存、标准输入输出及SOCKET,等等。 |
bn | 自定义 | openssl实现大数管理的结构及其函数 |
buffer | 自定义 | openssl自定义的缓冲区结构体 |
conf | 自定义 | openssl自定的管理配置结构和函数 |
dso | 自定义 | openssl自定义的加载动态链接库的管理函数接口 |
engine | 自定义 | openssl自定义的Engine机制源代码。 |
err | 自定义 | Openssl自定义的错误信息处理机制 |
evp | 自定义 | openssl定义的一组高层算法封装函数, 包括了对称加密算法封装、非对称加密算法封装、签名验证算法封装 及信息摘要算法封装 |
objects | 自定义 | openssl管理各种数据对象的定义和函数。 事实上objects的oid是根据ASN.1的标准进行命名的, 不完全是Openssl自定义结构 |
rand | 自定义 | openssl的安全随机数产生函数和管理函数 |
stack | 自定义 | 定义了Openssl中STACK结构和相关管理函数 |
threads | 自定义 | Openssl处理线程的一些机制 |
txt_db | 自定义 | openssl提供文本证书库的管理机制 |
ui | 自定义 | openssl定义的一下用户接口交换函数 |
perlasm | 自定义 | 编译的时候需要用到一些Perl辅助配置文件 |
4.1.3 Openssl文档目录
openssl的文档主要分为三部分:应用程序说明文档、密码算法库API文档及SSL协议库API文档。
4.2 Openssl功能
4.2.1 应用程序
指令 | 类型 | 功能说明 |
asn1parse | 其他 | 对ASN.1编码的文件或字符串进行解析, 比如对证书文件,可以使用该指令对其进行解释, 他会将其中每一个数据对象打印处理 |
ca | 证书签发和管理 | 该指令是一个功能强大的指令,模拟一个小型CA的功能, 并跟Openssl提供的文本数据库联系起来作为证书数据库。 该指令具有证书签发、验证、吊销等功能 |
ciphers | 其他 | 该指令可以列出不同的协议支持的算法体系。 |
crl | 证书签发和管理 | 该指令可以吊销证书列表(CRL)文件进行文本解析和验证 |
crl2pkcs7 | 格式转换 | 该指令可以CRL和多个证书封装成一个PKCS#7格式的证书文件 |
dgst | 信息摘要和签名 | 该指令可以使用不同的信息摘要算法对输入的信息进行信息摘要操作, 并且可以对摘要的信息进行签名或者验证 |
dh | 非对称密钥 | 生成和处理DH密钥参数文件,dhparam已经继承了该指令的功能, 一般不使用该指令了 |
dhparam | 非对称密钥 | 用于生成DH密钥参数文件、解析DH密钥参数文件及格式转换等 |
dsa | 非对称密钥 | 该指令用于对DSA密钥的格式转换及信息输出处理, 并且可以对DSA密钥进行加密 |
dsaparam | 非对称密钥 | 该指令用于生成和处理DSA参数文件, 并且可以用于生成DSA密钥 |
enc | 对称密钥 | 该指令可以使用Openssl支持的各种对称加密算法给定的数据 或者文件进行加密或者解密 |
engine | 其他 | 该指令显示Openssl支持的Engine借口列表, 并可以测试Openssl支持的engine借口是否有效 |
errstr | 其他 | 根据给定错误代码显示响应的错误信息 |
gendh | 非对称密钥 | 生成DH密钥,该功能应景继承到dhparam指令中 |
gendsa | 非对称密钥 | 根据DSA参数文件生成一个DSA私钥, 可以采用不同的算法对DSA私钥加密保护 |
nseq | 格式转换 | 将普通X509证书转换成Netscape格式的证书 |
ocsp | 其他 | 是一个实现在线证书状态协议OCSP的指令工具, 可以对证书的有效性进行验证等OCSP任务操作 |
passwd | 其他 | 根据给定的口令通过HASH算法生成密钥 |
pkcs12 | 格式转换 | 该指令可以将X.509证书和PEM编码的私钥封装成PKCS#12格式的证书, 也可以将PKCS#12格式的证书专程X509证书和私钥 |
pkcs7 | 格式转换 | 该指令级那个PKCS#7格式文件转换成普通的X509格式证书或CRL |
pkcs8 | 格式转换 | 该指令可以将私钥加密转换成PKCS#8格式或者将PKCS#8格式私钥 转换成普通的PEM或DER编码私钥 |
rand | 其他 | 该质量可能给可以产生一些列的为随机数比特,并保存在文件中 |
req | 证书签发和管理 | 该指令生成证书标准的请求文件, 而且可以生成自签名的跟证书 |
rsa | 非对称密钥 | 该指令对RSA密钥进行格式转换和文本解析输出等处理, 格式转换的时候可以对密钥进行加密 |
rsautl | 非对称密钥 | 该指令采用RSA算法对输入数据进行签名、验证、加密和解密等操作 |
s_client | SSL测试 | 该指令模拟一个SSL客户端, 可以对支持SSL的服务器进行测试和调试操作 |
s_server | SSL测试 | 该指令模拟一个SSL服务器,可以对支持SSL的浏览器进行测试和链接操作 |
s_time | SSL测试 | 该指令可以用来测试建立一个SSL链接的时间 |
sess_id | SSL测试 | 该指令可以处理经编码保存下来的SSL session结构 并可以根据选项打印出其中的信息 |
smime | 其他 | 该只ing可以用来对S/MIME邮件进行加密、解密、签名和验证等操作 |
speed | 其他 | 该指令测试算法的速度,如果有硬件加密设备, 也可以测试硬件加密设备的速度 |
spkac | SSL测试 | 该指令用来处理Nestcape的签名公钥和挑战文件(SPKAC), 可以验证SPKAC的签名,打印信息,也可以用来生成SPKAC文件 |
verify | 证书签发和管理 | 该指令用来验证证书或者证书链的合法性 |
version | 其他 | 该指令用来输出openssl的版本信息 |
x509 | 证书签发和管理 | 该指令用来显示证书内容及签发新的证书 |
4.2.1 Engine机制
简要名称 | Engine接口描述 |
dynamic | 动态加载Engine设备的接口 |
cswift | CrytoSwift的硬件加密设备Engine支持 |
chil | nChipher硬件加密设备Engine支持 |
atalla | Atalla硬件加密设备Engine支持 |
nuron | Nuron硬件加密设备Engine支持 |
ubsec | UBSEC硬件设备Engine支持 |
aep | Aep硬件加密设备Engine支持 |
sureware | SureWare硬件加密设备Engine支持 |
4758cca | IBM 4758 CCA硬件加密设备Engine支持 |
4.3 Openssl应用
openssl的应用一般可以分为两种不同的方式:基于Openssl指令的应用和基于Openssl加密库和协议库应用。
4.4 Openssl授权
openssl的授权问题很多人并不重视,或者,你也不愿意浪费宝贵的时间在这一节上面。但是,阅读本书的人基本上都是以通过自己的知识在产品中的实现来体现自己的价值的,所以努力维护知识产权,从根本上还是维护了我们自己的利益。
Openssl的授权有两部分组成的:Openssl授权和原始的SSLeay授权。当然,这两种授权大同小异,基本上没有限制的,只要产品加入或者保留Openssl和SSLeay的版本声明就行。
4.5 本章小结
本章对Openssl作了一个初步的介绍,给读者全面展示openssl的历史、结构、功能和应用。
本章首先介绍了Openssl的背景,并将Openssl和其他同类的加密算法做了比较