openssl不是内部或外部命令_OpenSSL新架构蓝图
概述
日前OpenSSL官網(wǎng)公布了未來OpenSSL的架構藍圖。作為戰(zhàn)略性的架構目標,需要大量的版本迭代本文檔概述了OpenSSL戰(zhàn)略架構。它需要多個版本的迭代從目前最新的版本1.1開始直到3.0甚至是4.0最終實現(xiàn)。由于版本架構變動非常大,涉及大量的變化和迭代,力爭在OpenSSL 3.0.0版本中實現(xiàn)對絕大多數(shù)應用程序的影響最小,并能高性能的編譯遷移。3.0后對目前版本的功能將通過API來實現(xiàn),現(xiàn)有引擎將不再支持。本文蟲蟲和大家一起來學習OpenSSL的現(xiàn)有架構、存在問題,新架構、特點,實現(xiàn)等。
現(xiàn)有架構
當前版本OpenSSL提供的功能主要通過四個主要組件提供:
1. libcrypto加密庫。該庫提供了大量加密算法的實現(xiàn)。另外提供libssl和libcrypto使用支持服務,以及CMS和OCSP等協(xié)議的實現(xiàn)。
2.引擎。 libcrypto的功能可以通過Engine API進行擴展。引擎是可動態(tài)加載的模塊,它們向libcrypto注冊并使用可用的鉤子來提供加密算法實現(xiàn)。通常這些hook由libcrypto提供的算法的替代實現(xiàn)(例如,用于實現(xiàn)算法的硬件加速),還包括默認未在OpenSSL中實現(xiàn)的算法。引擎作為OpenSSL發(fā)行版的一部分提供,未實現(xiàn)的引擎則通過外部第三方提供。
3.libssl。該庫依賴于libcrypto并實現(xiàn)TLS和DTLS協(xié)議。
4.應用程序。應用程序是一組命令行工具,這些工具使用底層的libssl和libcrypto庫來提供一系列的加密和其他功能:
密鑰和參數(shù)的生成和檢查;
證書生成和檢查;
SSL/TLS測試工具集;
ASN.1檢查;
其他等。
現(xiàn)有架構的特點和問題
目前版本的OpenSSL具有以下特征和問題:
1.EVP層。
EVP在API級別提供與具體加密功能實現(xiàn)和打包分開的的高級抽象接口。
EVP層還提供復合操作,例如簽名和驗證的打包。一些復合操作也EVP級操作提供(例如HMAC-SHA256)。
EVP還允許使用算法無關的方式使用加密算法(例如,EVP_DigestSign適用于RSA和ECDSA算法)。
2.不支持FIPS140。
FIPS140只能在OpenSSL-1.0.2中使用,它早于目前架構,不兼容API或ABI。
架構圖
現(xiàn)有的體系結構是一個簡單的4級分層,底部為引擎層和算法層。 TLS層依賴于加密層,應用程序依賴于TLS和加密層。
注意:圖中組件的存在并不表示該組件是公共API或旨在供最終用戶直接訪問或使用。
打包圖
以上的各層的功能和組件都被打包到了基礎庫(libcrypto和libssl)以及相關的引擎接口以及用于運行各種應用程序?qū)崿F(xiàn)的"openssl"命令行可執(zhí)行文件。打包圖如下所示。
新架構
新架構的特點
新架構的的目的是優(yōu)化現(xiàn)有架構,新架構由一下功能組成:
1、核心服務由應用程序和應用程序提供器使用的構建塊組成。 (例如BIO,X509,SECMEM,ASN1等)。
2、提供器實現(xiàn)加密算法和支持服務。提供器由以下一個或多個功能的組合:
算法的加密子,例如如何加密/解密/簽名/哈希等
算法的序列化,例如如何將私鑰轉(zhuǎn)換為PEM文件。序列化當前支持的格式或者不支持的格式的擴展。
存儲加載后端。 OpenSSL目前有一個存儲加載程序,可以從文件中讀取密鑰,參數(shù)和其他項。提供器可以從另一個位置(例如LDAP目錄)加載加載器。
提供器可以是完全獨立的,也可以使用由不同提供器或核心服務提供的服務。
例如,應用程序可以使用一個加密原子實現(xiàn)由硬件加速提供程序?qū)崿F(xiàn)的算法,但是其他程序提供的序列化服務把密鑰導出為PKCS#12格式。
程序默認內(nèi)置一個提供器(包含由當前OpenSSL加密算法實現(xiàn)的核心),但其他提供器可以在在運行時動態(tài)加載。
舊提供器模塊將為較舊的算法(例如,DES,MDC2,MD2,Blowfish,CAST)提供加密實現(xiàn)。 OMC會發(fā)布一個策略,說明從舊提供器轉(zhuǎn)化到默認提供器的時間和遷移方法。
FIPS提供器內(nèi)嵌的OpenSSL FIPS加密模塊可以在運行時動態(tài)加載。
3、核心實現(xiàn)對默認應用程序提供器(和其他提供商)提供的服務器的訪問。提供器負責為Core提供服務和方法。
Core將實現(xiàn)基于屬性的查找功能,用于算法查找,例如通過"fips = true"或"keysize = 128,constant_time = true"這樣條件來搜索算法。
4、協(xié)議的實現(xiàn)。例如。 TLS,DTLS。
新架構的特點:
1、EVP層功能縮減,僅僅對提供器提供的服務進行打包。大多數(shù)功能將直接調(diào)用,沒有或者很少的預處理和后處理。
2、將提供新的EVP API用來查找Core中提供給特定EVP調(diào)用的算法的實現(xiàn)。
信息將以與實現(xiàn)無關的方式在核心庫和提供者之間傳遞。
3、舊API將被刪除(例如繞過EVP層的底層API)。
4、OpenSSL FIPS加密模塊將由動態(tài)加載的提供器實現(xiàn),并且自包含,只依賴于核心提供的系統(tǒng)運行時庫和服務。
5、其他接口也可能會隨著時間的推移而轉(zhuǎn)換到核心庫。
6、引擎功能由提供器取代。
架構圖
OpenSSL新架構圖如下圖所示。
上圖中顯示的組件如下:
1、應用程層:命令行應用程序,例如ca,ciphers,cms,dgst等
2、協(xié)議:提供根據(jù)標準協(xié)議在端點之間進行通信的功能
TLS協(xié)議:所有支持的TLS/DTLS協(xié)議和支持基礎設施的實現(xiàn),例如:
SSLBIO:使用TLS進行通信的BIO
Statem:TLS狀態(tài)機
RECORD:TLS記錄層
其他協(xié)議:
CMS:加密消息語法標準的實現(xiàn)
OCSP:在線證書狀態(tài)協(xié)議的實現(xiàn)
TS:時間戳協(xié)議的實現(xiàn)
支持服務:用于支持協(xié)議代碼實現(xiàn)的組件
Packet:用于讀取協(xié)議消息的內(nèi)部組件
Wpacket:用于編寫協(xié)議消息的內(nèi)部組件
3、核心:這是將服務請求(例如加密)關聯(lián)到該服務的提供器的基礎組件。核心實現(xiàn)了提供器的注冊幾附屬參數(shù)的設置。它還支持通過對給定服務屬性進行服務的搜索功能。例如,加密服務的屬性可能包括"aead","aes-gcm","fips","security-bits = 128"等。
4、默認提供器:實現(xiàn)核心啟動時默認注冊服務。
支持服務
低層實現(xiàn):這是實際實現(xiàn)加密算法的一組組件。
5、FIPS提供器:實現(xiàn)一組經(jīng)過FIPS驗證并可供核心使用的服務。包括以下支持的服務:
POST:開機自檢
KAT:已知的答案測試
完整性檢查等等
6、舊提供器:提供通過EVP級API公開的舊算法的實現(xiàn),為向后兼容提供服務。
7、第三方提供器:不屬于OpenSSL發(fā)行版。第三方可以實施自己的提供者。
8、公共服務:這部分構成了應用程序和提供器可用的構建塊。 (例如BIO,X509,SECMEM,ASN1等)。
9、舊版API。 低層API。這里的特指老API,而不是算法本身。例如,AES不是老算法,但它還在老API中(例如AES_encrypt)。
打包圖
以上的架構圖提供各種組件都會打包到一下文件,打包圖如下:
可執(zhí)行的應用程序供用戶使用;
應用程序使用的庫;
可動態(tài)加載的模塊供核心使用。
圖中涉及的包有:
Openssl可執(zhí)行文件。命令行應用程序。
libssl。這包含與TLS和DTLS直接相關的所有內(nèi)容。它的內(nèi)容與現(xiàn)有架構中的libssl大致相同,某些支持服務將移至libcrypto。
Libcrypto。該庫包含以下組件:
核心服務的實現(xiàn),例如:X509,ASN1,EVP,OSSL_STORE等
核心
與TLS或DTLS無關的協(xié)議
協(xié)議支持服務(例如Packet和Wpacket)
默認提供程序,包含所有默認算法的實現(xiàn)
Libcrypto舊程序。提供兼容老程序的底層API。這些APIS算法的實現(xiàn)可能來自任何提供器。
FIPS模塊。它包含F(xiàn)IPS提供器程序,該提供程序?qū)崿F(xiàn)一組經(jīng)過FIPS驗證并在核心中注冊的服務。
舊模塊。這包含舊版提供器程序。
總結
以上是生活随笔為你收集整理的openssl不是内部或外部命令_OpenSSL新架构蓝图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “衰恨满秋容”下一句是什么
- 下一篇: 《白鹿原》于胡子指的是谁 怎么死的