openSSL學習-0

本文記錄openSSL密碼庫的學習。

首先推薦:openSSL中文手冊

介紹

openssl是一個功能豐富且自包含的開源安全工具箱。
它提供的主要功能有:SSL協議實現(包括SSLv2、SSLv3和TLSv1)、大量軟算法(對稱/非對稱/摘要)、大數運算、非對稱算法密鑰生成、ASN.1編解碼庫、證書請求(PKCS10)編解碼、數字證書編解碼、CRL編解碼、OCSP協議、數字證書驗證、PKCS7標準實現和PKCS12個人數字證書格式實現等功能。

我安裝的版本:3.0.3
其中內置密碼算法有:
image

安裝

主要參考:INSTALL.md

Window安裝

此安裝方法,是安裝的工具,只能拿來用,不能修改和閱讀其中的源碼。

參考:開源密碼庫

Mac安裝

image

./Configure
#編譯
make
make test
#安裝(默認位置:/usr/local)
make install

安裝在其他位置:

./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl

源碼

openssl源代碼主要由eay庫、ssl庫、工具源碼、範例源碼以及測試源碼組成。

eay庫

eay庫是基礎的庫函數,提供了很多功能。源代碼放在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)等,都很有規律。

工具源碼

工具源碼主要在crypto/apps目錄下,默認編譯時只編譯成openssl(windows下爲openssl.exe)可執行文件。該命令包含了各種命令工具。此目錄下的各個源碼可以單獨進行編譯。

範例源碼

範例源碼在demo目錄下,另外engines目錄給出了openssl支持的幾種硬件的engines源碼,也可以作爲engine編寫參考。

測試源碼

測試源碼主要在test目錄下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章