參考鏈接
- 在ubuntu環境下執行openssl編譯和安裝_MY CUP OF TEA的博客-CSDN博客_openssl ubuntu
- OpenSSL編程 趙春平
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 目錄下。
?