参考链接
OpenSSL
简介
-
它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能
安装
- 运行./config --prefix=/usr/local/openssl 即生成动态库,且将其安装在 /usr/local/openssl 文件夹下
- 更多选项用./config --help 来查看
- 比如:no-mdc2、no-cast no-rc2、no-rc5、no-ripemd、no-rc4 no-des 、no-md2、no-md4、no-idea 、 no-aes、no-bf、no-err、no-dsa、no-dh、no-ec、no-hw、no-asm、no-krb5、no-dso 、no-threads 、 no-zlib、-DOPENSSL_NO_HASH_COMP、-DOPENSSL_NO_ERR、-DOPENSSL_NO_HW 、 -DOPENSSL_NO_OCSP、-DOPENSSL_NO_SHA256 和-DOPENSSL_NO_SHA512 等,去掉不必要的内容可以减少生成库的大小。
- 若要生成 debug 版本的库和可执行程序加-g 或者 -g3(openssl 中有很多宏,需要调试学习最好加上-g3)。
- make
- make test 开始测试,此步骤可选
- make install
- openssl 会被安装到/usr/local/openssl 目录,包括头文件目录 include、可执行文件目录 bin、man 在线帮助、库目录 lib 以及配置文件目录(ssl)
源代码
- openssl 源代码主要由ssl 库、工具源码、范例源码以及测试源码组成。
crypto源代码
- 包括如下内容:
- 1) asn.1 DER 编码解码(crypto/asn1 目录),它包含了基本 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 能以堆栈的形式显示各 个错误。本目录下只有基本的错误处理接口,具体的的错误信息由各个模块提供。各个模块专门用于错误处理的文件一般为*_err..c 文件。
- 9) 对称算法、非对称算法及摘要算法封装(crypto/evp 目录)。
- 10) HMAC(crypto/hmac 目录),实现了基于对称算法的 MAC。
- 11) hash 表(crypto/lhash 目录),实现了散列表数据结构。openssl 中很多数据结构都是以散列表来存放的。比如配置信息、ssl session 和 asn.1 对象信息等。
- 12) 数字证书在线认证(crypto/ocsp 目录),实现了 ocsp 协议的编解码以及证书 有效性计算等功能。
- 13) PEM 文件格式处理(crypto/pem),用于生成和读取各种 PEM 格式文件, 包括各种密钥、数字证书请求、数字证书、PKCS7消息和PKCS8消息等。
- 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、ccrypto/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 (未找到))。
SSL 源代码
- ssl 库所有源代码在 ssl 目录下,包括了 sslv2、sslv3、tlsv1 和 DTLS 的源代码。各个版本基本上都有客户端源码(*_clnt.c)、服务源码(*_srvr.c)、通用源码(*_both.c)、底层包源码(*_pkt.c)、方法源码(*_meth.c)以及协议相关的各种密钥计算源码(*_enc.c)等,都很有规律。 存疑,有问题
工具源码 apps
- 工具源码主要在 crypto/apps 目录下,默认编译时只编译成 openssl(windows 下为openssl.exe)可执行文件。该命令包含了各种命令工具。此目录下的各个源码可以单独进行编译
范例源码
- 范例源码在 demo 目录下
engines
- 另外 engines 目录给出了 openssl 支持的几种硬件的 engines 源码,也可以作为 engine 编写参考。
test测试源码
- 测试源码主要在 test 目录下。