openssl 源碼介紹
一、crypto目錄
openssl 源代碼主要由 eay 庫、ssl 庫、工具源碼、范例源碼以及測試源碼組成。eay 庫是基礎(chǔ)的庫函數(shù),提供了很多功能。源代碼放在 crypto 目錄下。包括如下內(nèi)
容:
1) asn.1 DER 編碼解碼(crypto/asn1 目錄),它包含了基本 asn1 對象的編解碼以及數(shù)字證書請求、數(shù)字證書、CRL 撤銷列表以及 PKCS8 等最基本的編解碼函數(shù)。這些函數(shù)主要通過宏來實現(xiàn)。
2) 抽象 IO(BIO,crypto/bio 目錄),本目錄下的函數(shù)對各種輸入輸出進(jìn)行抽象,包括文件、內(nèi)存、標(biāo)準(zhǔn)輸入輸出、socket 和 SSL 協(xié)議等。
3) 大數(shù)運算(crypto/bn 目錄),本目錄下的文件實現(xiàn)了各種大數(shù)運算。這些大數(shù)運算主要用于非對稱算法中密鑰生成以及各種加解密操作。另外還為用戶提供了大量輔助函數(shù),比如內(nèi)存與大數(shù)之間的相互轉(zhuǎn)換。
4) 字符緩存操作(crypto/buffer 目錄)。
5) 配置文件讀取(crypto/conf 目錄),openssl 主要的配置文件為 openssl.cnf。本目錄下的函數(shù)實現(xiàn)了對這種格式配置文件的讀取操作。
6) DSO(動態(tài)共享對象,crypto/dso 目錄),本目錄下的文件主要抽象了各種平臺的動態(tài)庫加載函數(shù),為用戶提供統(tǒng)一接口。
7) 硬件引擎(crypto/engine 目錄),硬件引擎接口。用戶如果要寫自己的硬件引擎,必須實現(xiàn)它所規(guī)定的接口。
8) 錯誤處理(crypto/err 目錄),當(dāng)程序出現(xiàn)錯誤時,openssl 能以堆棧的形式顯示各個錯誤。本目錄下只有基本的錯誤處理接口,具體的的錯誤信息由各個模塊提供。各個模塊專門用于錯誤處理的文件一般為*_err..c 文件。
9) 對稱算法、非對稱算法及摘要算法封裝(crypto/evp 目錄)。
10)HMAC(crypto/hmac 目錄),實現(xiàn)了基于對稱算法的 MAC。
11)hash 表(crypto/lhash 目錄),實現(xiàn)了散列表數(shù)據(jù)結(jié)構(gòu)。openssl 中很多數(shù)據(jù)結(jié)構(gòu)都是以散列表來存放的。比如配置信息、ssl session 和 asn.1 對象信息等。
12)數(shù)字證書在線認(rèn)證(crypto/ocsp 目錄),實現(xiàn)了 ocsp 協(xié)議的編解碼以及證書有效性計算等功能。
13)PEM 文件格式處理(crypto/pem),用于生成和讀取各種 PEM 格式文件,包括各種密鑰、數(shù)字證書請求、數(shù)字證書、PKCS7 消息和 PKCS8 消息等。
14)pkcs7 消息語法(crypto/pkcs7 目錄),主要實現(xiàn)了構(gòu)造和解析 PKCS7 消息;
15)pkcs12 個人證書格式(crypto/pckcs12 目錄),主要實現(xiàn)了 pkcs12 證書的構(gòu)造和解析。
16)隊列(crypto/pqueue 目錄),實現(xiàn)了隊列數(shù)據(jù)結(jié)構(gòu),主要用于 DTLS。
17)隨機(jī)數(shù)(crypto/rand 目錄),實現(xiàn)了偽隨機(jī)數(shù)生成,支持用戶自定義隨機(jī)數(shù)生成。
18)堆棧(crypto/stack 目錄),實現(xiàn)了堆棧數(shù)據(jù)結(jié)構(gòu)。
19)線程支持(crypto/threads),openssl 支持多線程,但是用戶必須實現(xiàn)相關(guān)接口。
20)文本數(shù)據(jù)庫(crypto/txt_db 目錄)。
21)x509 數(shù)字證書(crypto/x509 目錄和 crypto/x509v3),包括數(shù)字證書申請、數(shù)字證書和 CRL 的構(gòu)造、解析和簽名驗證等功能了;
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)以及密鑰交換/認(rèn)證算法(crypto/dh 和 crypto/krb5)。
ssl 庫所有源代碼在 ssl 目錄下,包括了 sslv2、sslv3、tlsv1 和 DTLS 的源代碼。各個版本基本上都有客戶端源碼(*_clnt.c)、服務(wù)源碼(*_srvr.c)、通用源碼(*_both.c)、底層包源碼(*_pkt.c)、方法源碼(*_meth.c)以及協(xié)議相關(guān)的各種密鑰計算源碼(*_enc.c)等,都很有規(guī)律。
二、apps目錄
所以openssl命令,都是根據(jù)這個目錄下的代碼編譯生成的,通過對openssl各種基礎(chǔ)庫的調(diào)用,實現(xiàn)了openssl的各種命令。

浙公網(wǎng)安備 33010602011771號