本頁使用了標題或全文手工轉換

OpenSSL

維基百科,自由的百科全書
跳至導覽 跳至搜尋
OpenSSL
OpenSSL logo.svg
Lets Encrypt R3 certificate detail screenshot.png
開發者OpenSSL專案
初始版本1998
穩定版本3.0.5(2022年7月5日,​2個月前​(2022-07-05[1][±]
預覽版本3.0 Beta 2(2021年7月29日,​13個月前​(2021-07-29[2][±]
原始碼庫 編輯維基數據鏈結
程式語言C語言組譯Perl
類型安全性加密函式庫
授權條款3.0以前:OpenSSL與SSLeay雙重授權條款
3.0開始:Apache授權條款2.0
網站www.openssl.org

電腦網路上,OpenSSL是一個開放原始碼軟體函式庫套件,應用程式可以使用這個套件來進行安全通訊,避免竊聽,同時確認另一端連線者的身分。這個套件廣泛被應用在網際網路的網頁伺服器上。

其主要函式庫是以C語言所寫成,實作了基本的加密功能,實作了SSL與TLS協定。OpenSSL可以運行在OpenVMSMicrosoft Windows以及絕大多數類Unix作業系統上(包括SolarisLinuxMac OS X與各種版本的開放原始碼BSD作業系統)。

雖然此軟體是開放原始碼的,但其授權書條款與GPL有衝突之處,故GPL軟體使用OpenSSL時(如Wget)必須對OpenSSL給予例外。

歷史[編輯]

OpenSSL計劃在1998年開始,其目標是發明一套自由的加密工具,在網際網路上使用。OpenSSL以Eric Young以及Tim Hudson兩人開發的SSLeay為基礎,隨著兩人前往RSA公司任職,SSLeay在1998年12月停止開發。因此在1998年12月,社群另外分支出OpenSSL,繼續開發下去。

OpenSSL管理委員會目前由7人組成[3],有13個開發人員[4]具有提交權限(其中許多人也是OpenSSL管理委員會的一部分)。只有兩名全職員工(研究員),其餘的是志願者。

該項目每年的預算不到100萬美元,主要依靠捐款。 TLS 1.3的開發由Akamai贊助。[5]

主要版本釋出[編輯]

OpenSSL版本歷史[6][7]
版本 初始版本日期 備註 最近更新版本
舊版本,不再支援: 0.9.1 1998年12月23日
  • OpenSSL專案的正式開啟
0.9.1c(1998年12月23日)
舊版本,不再支援: 0.9.2 1999年3月22日
  • 取代0.9.1c
0.9.2b(1999年4月6日)
舊版本,不再支援: 0.9.3 1999年5月25日
  • 取代0.9.2b
0.9.3a(1999年5月27日)
舊版本,不再支援: 0.9.4 1999年8月9日
  • 取代0.9.3a
0.9.4(1999年4月9日)
舊版本,不再支援: 0.9.5 2000年2月28日
  • 取代0.9.4
0.9.5a(2000年4月1日)
舊版本,不再支援: 0.9.6 2000年9月24日
  • 取代0.9.5a
0.9.6m(2004年3月17日)
舊版本,不再支援: 0.9.7 2002年12月31日
  • 取代0.9.6m
0.9.7m(2007年2月23日)
舊版本,不再支援: 0.9.8 2005年7月5日
  • 取代0.9.7m
0.9.8zh(2015年12月3日)
舊版本,不再支援: 1.0.0 2010年3月29日
  • 取代0.9.8n
1.0.0t(2015年12月3日)
舊版本,不再支援: 1.0.1[8] 2012年3月14日 1.0.1u(2016年9月22日)
舊版本,不再支援: 1.0.2[9] 2015年1月22日 1.0.2u(2019年12月20日 (2019-12-20)
舊版本,不再支援: 1.1.0[10] 2016年8月25日 (2016-08-25) 1.1.0l(2019年9月10日 (2019-09-10)
舊版本,仍被支援: 1.1.1[12] 2018年9月11日 (2018-09-11) 1.1.1p(2022年6月21日 (2022-06-21)
當前版本: 3.0.0[note 1] 2021年9月7日 (2021-09-07) 3.0.4 (2022年6月21日 (2022-06-21)
格式:
舊版本
舊版本,仍被支援
目前版本
最新的預覽版
未來版本

演算法[編輯]

OpenSSL支援許多不同的加密演算法:

加密
AESBlowfishCamelliaChacha20Poly1305SEED英語SEEDCAST-128英語CAST-128DESIDEARC2英語RC2RC4RC5TDESGOST 28147-89英語GOST (block cipher)[16]SM4
密碼雜湊函式
MD5MD4MD2SHA-1SHA-2SHA-3RIPEMD-160MDC-2英語MDC-2GOST R 34.11-94英語GOST (hash function)[16]BLAKE2Whirlpool[17]SM3
公開金鑰加密
RSADSAECDSAECDHE迪菲-赫爾曼密鑰交換橢圓曲線密碼學X25519Ed25519英語EdDSA#Ed25519X448英語Curve448Ed448英語Curve448GOST R 34.10-2001[16]SM2

(從1.0版開始,橢圓曲線迪菲-赫爾曼金鑰交換用於支援前向安全性[18])

功能[編輯]

  1. 建立私鑰:openssl genrsa -out yourdomain.key 2048 產生一個pem格式的rsa非對稱加密演算法的2048位元長的私鑰檔案yourdomain.key
  2. 檢視私鑰的內容:openssl rsa -text -in yourdomain.key -noout
  3. 抽取出公鑰:openssl rsa -in yourdomain.key -pubout -out yourdomain_public.key
  4. 建立憑證簽章請求檔案(certificate signing request,CSR):openssl req -new -key yourdomain.key -out yourdomain.csr,這時需要線上回答一系列問題(也可以事先寫在設定檔中)。其中Common Name應該填寫完整的域名(fully-qualified domain name,FQDN),如www.example.com
  5. 驗證憑證簽章請求檔案的內容:openssl req -text -in yourdomain.csr -noout -verify
  6. 驗證收到的憑證檔案:openssl x509 -text -in yourdomain.crt -noout
  7. 比較公鑰是同一個:openssl pkey -pubout -in .\private.key | openssl sha256openssl req -pubkey -in .\request.csr -noout | openssl sha256openssl x509 -pubkey -in .\certificate.crt -noout | openssl sha256
  8. 把PEM格式的key與certificate轉化為PKCS#12格式openssl pkcs12 -export -name "yourdomain-digicert-(expiration date)" -out yourdomain.pfx -inkey yourdomain.key -in yourdomain.crt 注意,PKCS#12格式儲存了憑證和私鑰,適用於從一個系統遷移到另一個系統。PKCS#12檔案通常為.pfx 或.p12副檔名。建議使用強password加密。
  9. PKCS#12到PEM轉化:openssl pkcs12 -in yourdomain.pfx -nocerts -out yourdomain.key -nodesopenssl pkcs12 -in yourdomain.pfx -nokeys -clcerts -out yourdomain.crt
  10. PEM到DER英語X.690#DER_encoding轉化:openssl x509 -inform PEM -in yourdomain.crt -outform DER -out yourdomain.deropenssl rsa -inform PEM -in yourdomain.key -outform DER -out yourdomain_key.der
  11. DER to PEM:openssl x509 -inform DER -in yourdomain.der -outform PEM -out yourdomain.crtopenssl x509 -inform DER -in yourdomain.der -outform PEM -out yourdomain.crt

心臟出血漏洞[編輯]

OpenSSL 1.0.1版本(不含1.0.1g)含有一個嚴重漏洞,可允許攻擊者讀取伺服器的記憶體資訊。該漏洞於2014年4月被公諸於世,影響三分之二的活躍網站[19]

分支[編輯]

Agglomerated SSL[編輯]

在2009年,OpenSSL API受挫之後,當時的OpenBSD開發人員Marco Peereboom建立了分支Agglomerated SSL(assl),它重新使用OpenSSL API,但提供了更簡單的外部介面。[20]

LibreSSL[編輯]

2014年4月的心臟出血漏洞事件之後,OpenBSD專案成員以OpenSSL 1.0.1g作為分支,建立一個名為LibreSSL的專案。[21]在縮減OpenSSL的代碼庫的第一周,將超過90,000行的C語言代碼從分支中刪除。[22]

BoringSSL[編輯]

2014年6月,Google釋出了自己的OpenSSL分支BoringSSL[23],計劃與OpenSSL和LibreSSL的開發者合作。[24][25][26]

GmSSL[編輯]

GmSSL支援SM2/SM3/SM4/SM9/ZUC等商用密碼,主要使用SM2替代RSA/Diffie-Hellman/ECDSA/ECDHSM3替代MD5/SHA-1/SHA-256SM4替代DES/AESSM9替代PKI/CA體系,所有代碼在GitHub上開源[27],並由北京大學資訊安全實驗室開發和維護[28]。此專案獲得2015年度中國Linux軟體大賽二等獎(一等獎空缺)[29]

參見[編輯]

註記[編輯]

  1. ^ 跳過主要版本號2.0.0,因為該版本號先前被用於OpenSSL的FIPS模組中。[15]

參考[編輯]

  1. ^ OpenSSL: Newslog. [2022-07-05]. 
  2. ^ OpenSSL: Newslog. [2021-07-29]. 
  3. ^ OpenSSL Management Committee. OpenSSL Software Foundation. [2018-07-22]. (原始內容存檔於2018-07-22). 
  4. ^ OpenSSL Committers. OpenSSL Software Foundation. [2018-07-22]. (原始內容存檔於2018-07-22). 
  5. ^ Marquess, Steve. Akamai sponsors TLS 1.3. openssl-announce (郵寄清單). 2017-01-19 [2018-11-09]. (原始內容存檔於2017-02-01). 
  6. ^ OpenSSL – Changelog. OpenSSL Software Foundation. [2016-09-26]. (原始內容存檔於2016-09-13). 
  7. ^ OpenSSL – Release Strategy. OpenSSL Software Foundation. [2016-09-26]. (原始內容存檔於2016-10-06). 
  8. ^ OpenSSL 1.0.1 Series Release Notes. [2017-02-20]. (原始內容存檔於2015-01-20). 
  9. ^ OpenSSL 1.0.2 Series Release Notes. [2017-02-20]. (原始內容存檔於2014-09-04). 
  10. ^ OpenSSL 1.1.0 Series Release Notes. [2017-02-20]. (原始內容存檔於2018-03-17). 
  11. ^ 11.0 11.1 Caswell, Matt. OpenSSL 1.1.1 Is Released - OpenSSL Blog. www.openssl.org. OpenSSL Foundation. 2018-09-11 [2018-09-18]. (原始內容存檔於2018-09-15) (英語). 
  12. ^ Inc., OpenSSL Foundation,. OpenSSL 1.1.1 Is Released - OpenSSL Blog. www.openssl.org. [2018-09-18]. (原始內容存檔於2018-09-15). 
  13. ^ Caswell, Matt. Using TLS1.3 With OpenSSL - OpenSSL Blog. www.openssl.org. OpenSSL Foundation. 2018-02-08 [2018-02-17]. (原始內容存檔於2018-02-09) (英語). 
  14. ^ Caswell, Matt. OpenSSL 1.1.1 Is Released. www.openssl.org. OpenSSL Foundation. 2018-09-11 [2018-09-18]. (原始內容存檔於2018-09-15) (英語). 
  15. ^ 15.0 15.1 Matt Caswell. The Holy Hand Grenade of Antioch. OpenSSL Blog. 2018-11-28 [2019-10-07]. (原始內容存檔於2021-09-07). 
  16. ^ 16.0 16.1 16.2 GOST engine OpenSSL 1.0.0 README. cvs.openssl.org. [2020-12-09]. (原始內容存檔於2013-04-15). 
  17. ^ OpenSSL source code, directory crypto/whrlpool. [2017-08-29]. (原始內容存檔於2019-02-17). 
  18. ^ Protecting data for the long term with forward secrecy. [2012-11-05]. (原始內容存檔於2016-03-04). 
  19. ^ OpenSSL安全协议存在漏洞危及网络用户数据安全. 網易科技報導. 2014-04-09 [2014-04-10]. (原始內容存檔於2014-04-12) (中文(中國大陸)). 
  20. ^ security/assl: assl-1.5.0p0v0 – hide awful SSL API in a sane interface. OpenBSD ports. 2014-05-22 [2015-02-10]. (原始內容存檔於2015-02-10). 
  21. ^ OpenBSD has started a massive strip-down and cleanup of OpenSSL. OpenBSD journal. 2014-04-15 [2018-02-14]. (原始內容存檔於2014-07-01). 
  22. ^ OpenBSD forks, prunes, fixes OpenSSL. ZDNet. 21 April 2014 [21 April 2014]. (原始內容存檔於2014-04-21). 
  23. ^ https://boringssl.googlesource.com/boringssl/頁面存檔備份,存於網際網路檔案館) BoringSSL
  24. ^ Google unveils independent 'fork' of OpenSSL called 'BoringSSL'. Ars Technica. 2014-06-21 [2018-02-14]. (原始內容存檔於2014-06-23). 
  25. ^ BoringSSL. Adam Langley's Weblog. 2014-06-20 [2018-02-14]. (原始內容存檔於2018-06-01). 
  26. ^ 存档副本. [2018-02-14]. (原始內容存檔於2018-02-14). 
  27. ^ GitHub上的GmSSL頁面
  28. ^ GmSSL —— 支持国密算法和标准的 OpenSSL 分支. 開源中國. [2016-05-17]. (原始內容存檔於2019-10-19). 
  29. ^ 首届中国Linux软件大赛:100万元奖金发出. 安全牛. [2015年12月12日]. (原始內容存檔於2019年10月19日). 

外部連結[編輯]