OpenSSL總體架構?
-
軟件包分為三個主要的功能部分:密碼算法庫 、 SSL協議庫及應用程序

- MacOS,MS,OS/2及 VMS這幾個目錄,包含了在不同的 平臺編譯時的環境變量配置文件,在安裝編譯完成之后,這幾個目錄就沒有作用了。
- bugs,certs,perl,shlib,times,tools 及 utils 目錄都是一些輔助的目錄 , 里面包含文件對于我們使用 OpenSSL進行工作并沒有很多的幫助,所以可以不作深究。但是編譯的時候還是需要的
- Crypto目錄是 OpenSSL所有密碼算法和一些 PKI相關標準源碼存放的目錄,也是 OpenSSL 最 重 要 的 一 個 目 錄 。
- SSL 目 錄 是 SSL 協 議 各 個 版 本 的 實 現 源 碼 存 放 的 目 錄 。
- Doc目錄是 OpenSSL使用的說明文檔存放的目錄,這個目錄對于 OpenSSL使用者來說具有 “芝麻開門”的作用。
- Apps目錄存放了OpenSSL所有應用程序的源代碼文件,也是研 究 OpenSSL API 的 很 好 的 例 子 。
- Demos 目 錄 就 是 一 些 樂 意 奉 獻 的 人 寫 的 OpenSSL 應 用 的例子,在你開始使用 OpenSSL進行工作之前,可以看看這個目錄,或許會有所幫助。
- Include 目 錄 是 使 用 OpenSSL 的 庫 進 行 編 程 的 時 候 可 能 需 要 使 用 到 的 一 些 頭 文 件 。
- Test 目錄是 OpenSSL一些自身功能測試源程序所在的地方。
注意事項
- 如果在 Windows平臺下將 OpenSSL編譯成功后,還會增加三個新的目錄:Inc32, Out32dl,Tmp32dl。
- Inc32目錄和Include目錄相似,存放的是 Windows平臺下使用 OpenSSL進行編程需要包含的頭文件。
- Out32dl則存放了 OpenSSL編譯成功后的可執行應用程序、鏈接庫 LIB文件和動態 DLL 文件。
- Tmp32dl則是在編譯過程中存放 OBJ等 臨時文件的目錄。

OpenSSL算法目錄
- Crypto 目錄包含了OpenSSL密碼算法庫的所有源代碼文件, 是 OpenSSL中最重要的目錄之一。
- OpenSSL的密碼算法庫包含了 OpenSSL中所有密碼算法、密鑰管理和證書管理相關標準的實現
- 在 Windows下編程后的庫文件名為libeay32.lib, 在 Linux 下 編 譯后生成的庫文件名為 libcrypto.a。 Crypto目錄下包含了眾多的子目錄,這些子目錄大多數以相關的算法或標準名稱的簡寫命名。
- 當然,并非所有這 些目錄存放的源文件都是密碼算法和標準,有些是 OpenSSL本身的一些相關功能文件, 如 BIO,DSO 和 EVP 等?




- 對稱加密算法8種,非對稱加密算法4種,信息摘要算法5種。?
?openssl文檔目錄
- OpenSSL的文檔使用Perl文檔格式保存,為 “.pod”文件,對于 Windows平臺的用戶,閱讀這樣的文檔可能存在一些麻煩,可以使用Perl工具pod2text或者pod2html 指令將文檔轉換成txt文本格式或者html格式以方便閱讀。
- doc文檔涉及到 應用程序說明文檔、密碼算法庫 API文檔及SSL協議庫API文檔
- 應用程序說明文檔目錄 (Apps)包含了大部分OpenSSL應用程序的使用和參數說明,并有部分例子。
- 密碼算法庫API文檔 (Crypto)則包含了部分OpenSSL密碼算法庫的API的使用說明,可惜不是很全面。
- SSL協議庫 API文檔包含了 OpenSSL實現的SSL協議和 TLS協議的大部分 API使用說明,該部分由于變動比較緩慢,所以文檔相對全面一些。此外, 目前版本的 OpenSSL文檔目錄下還有一個 Howto子目錄,現在只有一個文件,內容是關于證書的一些問題,希望后續的版本能夠豐富這個 Howto目錄。
- OpenSSL文檔目錄的根目錄下還有個綜述性質的文檔 ssleay.txt 和 openssl.txt, 也是值得一看的 。
Openssl的功能
對稱加密算法
- OpenSSL一共提供了8種對稱加密算法,其中7種是分組加密算法,僅有的一種流 加密算法是 RC4。這7種分組加密算法分別是 AES,DES,Blowfish,CAST,IDEA,RC2,RC5,都支持電子密碼本模式 (ECB)、加密分組鏈接模式 (CBC)、加密反饋模式 (CFB)和輸出反饋模式 (OFB)四種常用的分組加密模式。
- 其中,AES使用的加密反饋模式 (CFB)和輸出反饋模式 (OFB)分組長度是128位,其他算法使用的則是64位。
- 事實上,DES算法里面不僅僅是常用的 DES算法,還支持三個密鑰和兩個密鑰的3DES 算法。
- ?OpenSSL 還使用EVP封裝了所有的對稱加密算法,使得各種對稱加密算法能夠使用統一的 API接口EVP_Encrypt 和 EVP_Decrypt 進行數據的加密和解密 ,大大 提高了代碼的可重用性能 。
非對稱加密算法
- OpenSSL一共實現了4種非對稱加密算法,包括 DH 算法、RSA 算法、DSA 算法和 橢圓曲線算法 (EC)。
- DH算法一般用于密鑰交換。RSA算法既可以用于密鑰交換,也可以用于數字簽名,當然,如果你能夠忍受其緩慢的速度,那么也可以用于數據加密。
- DSA 算法則一般只用于數字簽名。
- OpenSSL 也使用EVP技術對不同功能的非對稱加密算法進行封裝,提供了統一的 API接口。如果使用非對稱加密算法進行密鑰交換或者密鑰加密, 則使用 EVP_Seal 和 EVP_Open 進行加密和解密 ; 如果使用非對稱加密算法進行數字簽名 ,則使用 EVP_Sign 和 EVP_Verify 進行簽名和驗證 。
信息摘要算法
-
OpenSSL實現了5種信息摘要算法,分別是 MD2,MD5,MDC2,SHA (SHA1)和 RIPEMD。SHA 算法事實上包括了SHA 和 SHA1兩種信息摘要算法 。 此外 , OpenSSL還實現了 DSS標準中規定的兩種信息摘要算法 DSS和 DSS1。
-
OpenSSL 采用EVP_Digest 接口作為信息摘要算法統 一 的 EVP 接 口 , 對所有信息摘要算法進行了封裝,提高了代碼的重用性。當然,跟對稱加密算法和非對稱加密算法不一 樣,信息摘要算法是不可逆的,不需要一個解密的逆函數。
密鑰和證書管理
- 密鑰和證書管理是PKI的一個重要組成部分 , OpenSSL 為之提供了豐富的功能 , 支持多種標準
- 首先,OpenSSL實現了 ASN.1的證書和密鑰相關標準,提供了對證書、公鑰、私鑰 、 證 書請求及CRL 等數據對象的DER , PEM 和 BASE64 的編解碼功能 。 OpenSSL 提供了產生各種公開密鑰對和對稱密鑰的方法、函數和應用程序,同時提供了對公鑰和私鑰 的 DER 編解碼功能 , 并實現了私鑰的PKCS#12 和 PKCS#8 的編解碼功能 。 OpenSSL 在標準中提供了對私鑰的加密保護功能,使得密鑰可以安全地進行存儲和分發。
- 在此基礎上,OpenSSL實現了對證書的 X.509標準編解碼、PKCS#12格式的編解 碼及 PKCS#7的編解碼功能。并提供了一種文本數據庫,支持證書的管理功能,包括證 書密鑰產生、請求產生、證書簽發、吊銷和驗證等功能。
- 事實上,OpenSSL提供的CA應用程序就是一個小型的證書管理中心 (CA),實現 了證書簽發的整個流程和證書管理的大部分機制。
SSL 和TLS 協議
- 雖然已經有眾多的軟件實現了SSL的功能,但是OpenSSL里面實現的SSL協議能夠讓我們對SSL協議有一個更加清楚的認識,因為至少存在兩點:一是OpenSSL實現的SSL協議是開放源代碼的,我們可以研究SSL協議實現的每一個細節;二是OpenSSL實現的SSL協議是純粹的SSL協議,沒有跟其他協議(如HTTP)協議結合在一起。由于SSL協議現在經常跟HTTP協議在一起應用形成HTTPS協議,所以很多人誤認為SSL協議就是為了保護Web安全性的,這實在是一個很大的解!
- OpenSSL實現了SSL協議的SSLv2和SSLv3,支持了其中絕大部分的算法協議。OpenSSL也實現了TLSv1.0,TLS是SSLv3的標準化版,雖然區別不大,但畢竟有很多細節不盡相同。OpenSSL除了提供使用SSL協議和TLS協議的API接口函數之外,還提供了兩個不錯的應用程序S_Client和S_Server。S_Client用來模擬SSL客戶端,可以用來測試SSL服務器,比如IIS和帶mod_ssl的Apache等;而S_Server模擬了一個SSL服務器,可以用來測試SSL客戶端,比如IE和Netscape等。事實上,由于是開放源代碼的,S_Client和S_Server程序的源代碼還是很好的OpenSSL的SSL接口API使用例子
應用程序
- 現在OpenSSL的應用中,很多都是基于OpenSSL的應用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的應用程序實現的。OpenSSL的應用程序是基于OpenSSL的密碼算法庫和SSL協議庫寫成的,所以也是一些非常好的OpenSSL的API使用范例,
- OpenSSL的應用程序主要包括密鑰生成、證書管理、格式轉換、數據加密和簽名、SSL測試,以及其他輔助配置功能。表4.4是OpenSSL-0.9.7版本的指令列表。在表4.4中,根據指令的性質,對指令進行了歸類,這些歸類不一定科學。
- 這些類型包括:對稱密鑰指令、非對稱密鑰指令、信息摘要和簽名指令、證書簽發和管理指令、標準轉換指令、SSL測試指令及其他指令。





?
Engine機制
-
Engine機制的目的是為了使OpenSSL能夠透明地使用第三方提供的軟件加密庫或者硬件加密設備進行加密。?
-
目前,OpenSSL的0.9.7版本支持的內嵌第三方加密設備有8種,包括:CryptoSwift,nCipher,Atala,Nuron,UBSEC,Aep,SureWare及IBM4758CCA的硬件加密設備。現在還出現了支持PKCS#11接口的Engine接口,支持微軟CryptoAPI的接口也有人進行開發。當然,所有上述Engine接口支持不一定很全面
?BIO機制
- BIO機制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類型的IO接口,如內存訪問、文件訪問及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供的API的復雜性也降低了很多。前面介紹的EVP封裝也提高了OpenSSL代碼的可重用性。
OpenSSL的應用
- penSSL的應用一般可以分為兩種不同的方式:基于OpenSSL指令的應用和基于OpenSSL加密庫和協議庫的應用。前者更容易一些,而后者需要做的工作更多一些。當然,這些應用不一定是截然分開的,你當然可以兩種都用一點,比如使用SSL協議的API,但是證書可以使用OpenSSL的指令簽發。
參考鏈接
- GitHub - openssl/openssl: TLS/SSL and crypto library
- openssl/openssl - Sourcegraph