02.openssl编程——简介
2.1 openssl简介
openssl是一个功能丰富且自包含的开源安全工具箱。他提供的主要功能有:
SSL协议实现(SSLv2 SSLv3和TLSv1)
大量的软算法(对称/非对称/摘要)
大数运算
非对称算法密钥生成
ASN.1编解码库
证书请求(PKCS10)编解码
数字证书编解码
CRL编解码
数字证书验证
PKCS7标准实现
PKCS12个人数字证书格式
2.2 openssl源代码
openssl源代码主要eay库、ssl库、工具源码\范例源码以及测试源码组成。
a.eay是基础的库函数。源代码在crypto目录中
1) asn.1 DER编码解码(crypto/ans1目录),她包含了基本asn1对象的编解码以及数字证书请求、数字证书、CRL撤销列表以及PKCS8等最基本的编解码函数。
2) 抽象IO(BIO,crypto/bio目录),本目录下的函数对各种输入输出进行抽象,包括文件、内存、标准输入输出、socket和SSL协议等
3) 大数运算(crypto/bn目录),本目录下的的文件实现了各种大数运算。这些大叔运算主要用于非对称算法中密钥生成以及各种加解密操作。
4) 字符缓存操作(crypto/buffer目录)
5) 配置文件读取(crypto/conf目录),openssl主要的配置文件为openssl.cnf。本目录下的函数实现了对这种格式配置文件的读取操作。
6) DSO(动态共享对象,crypto/dso目录),本目录下的文件主要抽象了各种平台的动态库加载函数,为用户提供统一接口。
7) 硬件引擎(crypto/engine目录),硬件引擎接口。用户如果要写自己的硬件引擎,必须实现他所规定的接口。
8) 错误处理(crypto/err目录),当程序出现错误时,openssl能以堆栈的形式显示各个错误。本目录下只有基本的错误处理接口,具体的错误的信息由各个模块提供。
9) 对称算法、非对称算法及摘要算法封装(crypto/evp目录)。
10) HMAC(crypto/hmac目录),实现了基于对称算法的MAC.
11) hash表(crypto/lhash目录),实现了散列表数据结构。openssl中很多数据结构都是以散列表来存放的。
12) 数字证书在线认证(crypto/ocsp目录),实现了ocsp协议的编解码以及证书有效性计算等功能。
13) PEM文件格式处理(crypto/pem),用于生成和读取各种PEM格式文件,包括各种密钥、数字证书请求、数字证书、PKCS7消息和PKC8消息等
14) pkcs7消息语法(crypto/pkcs7目录),主要实现了构造和解析PKCS7消息
15) pkcs12个人证书格式(crypto/pckcs12目录)、主要实现了pkcs12证书的构造和解析
16) 队列(crypto/pqueue目录),实现了队列数据结构,主要也能用于DTLS.
17) 随机数(crypto/rand目录),实现了伪随机数生成,支持用户自定义随机数生成。
18) 堆栈(crypto/stack目录),实现了堆栈数据结构
19) 线程支持(crypto/threads),openssl支持多线程,但是用户必须实现相关接口
20) 文件数据库(crypto/txt_db目录)
21) x509数字证书(crypto/x509目录和crypto/x509v3),包括数字证书申请、数字找那个书和CRL的构造、解析和签名验证等功能了。
22) 对称算法(crypto/aes、crypto/bf、crypto/cast、crypto/omp和crypto/des等目录)
23) 非对称算法(crypto/dh、crypto/dsa、crypto/ec和crypto/ecdh).
24) 摘要算法(crypto/md2、crypto/md4、crypto/md5和crypto/sha)以及密钥交换认证算法(crypto/dh和crypto/krb5).
b.ssl库
ssl库所有源代码在ssl目录下,包括sslv2、sslv3、tlsv1和DTLS的源代码。
客户端源码(__clnt.c)
服务端源码(__srvr.c)
通用源码(__both.c)
底层包源码(__pkt.c)
方法源码(__meth.c)
各种计算源码(__enc.c)
c.工具源码主要在(crypto/apps目录)
d.范例源码demo(目录)
e.测试源码(test目录)
2.3 openssl学习方法
a.建立学习环境
建立一个供调试openssl环境,可以是windows平台,也可以是linux或者其他平台。
b.学习openssl的命令
通过openssl命令学习,对openssl有基本的了解
c.学习openssl员代码并调试
主要的源代码有:
c1:apps目录下的各个程序,对应于openssl的各项命令。
c2:demos下各种源代码
c3:engines下各种源代码
c4:test目录下各种源代码
d.学会使用openssl的asn.1编解码,如数字证书、crl 、ocsp、pkcs8、pkcs12
e.查找资料
g.学习openssl相关书籍
《OpenSSL与网络信息安全--基础、结构和指令》
《Network Security with OpenSSL》(OReilly出版)
《OpenSSL for windows Developer’s Guide》