openssl

openssl

OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼演算法、常用的密鑰和證書封裝管理功能及SSL協定,並提供豐富的應用程式供測試或其它目的使用。

在OpenSSL被曝出現嚴重安全漏洞後,發現多數通過SSL協定加密的網站使用名為OpenSSL的開源軟體包。由于這是網際網路套用最廣泛的安全傳輸方法,被網銀、線上支付、電商網站、入口網站電子郵件等重要網站廣泛使用,所以該漏洞影響範圍廣大。

OpenSSL漏洞不僅影響以https開頭的網站,黑客還可利用此漏洞直接對個人PC發起"心髒出血"(Heartbleed)攻擊。據分析,Windows上有大量軟體使用了存在漏洞的OpenSSL代碼庫,可能被黑客攻擊抓取使用者電腦上的記憶體資料。

  • 軟體名稱
  • 軟體版本
    1.0.1 g
  • 更新時間
    2014年4月7日
  • 軟體授權
    開源
  • 英文名
    Open Secure Sockets Layer
  • 軟體平台
    網路傳輸層
  • 簡    稱
    OpenSSL

簡介

SSL是Secure Sockets Layer(安全套接層協定)的縮寫,可以在Internet上提供秘密性傳輸。網景Netscape公司在推出第一個Web流覽器的同時,提出了SSL協定標準。其目標是保證兩個套用間通信的保密性和可靠性,可在伺服器端和使用者端同時實現支持。已經成為Internet上保密通訊的工業標準。

安全套接層協定能使使用者/伺服器套用之間的通信不被攻擊者竊聽,並且始終對伺服器進行識別,還可選擇對使用者進行識別。SSL協定要求建立在可靠的傳輸層協定(TCP)之上。SSL協定的優勢在于它是與套用層協定獨立無關的,高層的套用層協定(例如:HTTP,FTP,TELNET等)能透明地建立于SSL協定之上。SSL協定在套用層協定通信之前就已經完成加密演算法、通信密鑰的協商及伺服器識別工作。在此之後套用層協定所傳送的資料都會被加密,從而保證通信的私密性。

通過以上敘述,SSL協定提供的安全信道有以下三個特徵:

1 資料的保密性

信息加密就是把明碼的輸入檔案用加密演算法轉換成加密的檔案以實現資料的保密。加密的過程需要用到密鑰來加密資料然後再解密。沒有了密鑰,就無法解開加密的資料。資料加密之後,隻有密鑰要用一個安全的方法傳送。加密過的資料可以公開地傳送。

2 資料的完整性

加密也能保證資料的一致性。例如:訊息驗證碼(MAC),能夠校驗使用者提供的加密信息,接收者可以用MAC來校驗加密資料,保證資料在傳輸過程中沒有被篡改過。

3 安全驗證

加密的另外一個用途是用來作為個人的標識,使用者的密鑰可以作為他的安全驗證的標識。SSL是利用公開密鑰加密技術(RSA)來作為使用者端與伺服器端在傳送機密資料時的加密通訊協定。

OpenSSL包含一個命令行工具用來完成OpenSSL庫中的所有功能,更好的是,它可能已經安裝到你的系統中了。

OpenSSL是一個強大的安全套接字層密碼庫,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,但是,你不應該隻將其作為一個庫來使用,它還是一個多用途的、跨平台的密碼工具。

特點

眾多的密碼演算法、公鑰基礎設施標準以及SSL協定,或許這些有趣的功能會讓你產生實現所有這些演算法和標準的想法。果真如此,在對你表示敬佩的同時,還是忍不住提醒你:這是一個令人望而生畏的過程。這個工作不再是簡單的讀懂幾本密碼學專著和協定文檔那麽簡單,而是要理解所有這些演算法、標準和協定文檔的每一個細節,並用你可能很熟悉的C語言字元一個一個去實現這些定義和過程。我們不知道你將需要多少時間來完成這項有趣而可怕的工作,但肯定不是一年兩年的問題。

首先,應該感謝Eric A. Young和Tim J. Hudson,他們自1995年開始編寫後來具有巨大影響的OpenSSL軟體包,更令我們高興的是,這是一個沒有太多限製的開放原始碼的軟體包,這使得我們可以利用這個軟體包做很多事情。Eric A. Young 和Tim J. Hudson是加拿大人,後來由于寫OpenSSL功成名就之後就到大公司裏賺大錢去了。1998年,OpenSSL項目組接管了OpenSSL的開發工作,並推出了OpenSSL的0.9.1版,到目前為止,OpenSSL的演算法已經非常完善,對SSL2.0、SSL3.0以及TLS1.0都支持。

OpenSSL採用C語言作為開發語言,這使得OpenSSL具有優秀的跨平台性能,這對于廣大技術人員來說是一件非常美妙的事情,可以在不同的平台使用同樣熟悉的東西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,這使得OpenSSL具有廣泛的適用性。但習慣C語言總比使用C++重新寫一個跟OpenSSL相同功能的軟體包輕松不少。

功能

基本功能

OpenSSL整個軟體包大概可以分成三個主要的功能部分:SSL協定庫、應用程式以及密碼演算法庫。OpenSSL的目錄結構自然也是圍繞這三個功能部分進行規劃的。

作為一個基于密碼學的安全開發包,OpenSSL提供的功能相當強大和全面,囊括了主要的密碼演算法、常用的密鑰和證書封裝管理功能以及SSL協定,並提供了豐富的應用程式供測試或其它目的使用。

輔助功能

BIO機製是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類型的IO接口,如記憶體訪問、檔案訪問以及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供API的復雜性也降低了很多。

OpenSSL對于亂數的生成和管理也提供了一整套的解決方法和支持API函式。亂數的好壞是決定一個密鑰是否安全的重要前提。

OpenSSL還提供了其它的一些輔助功能,如從口令生成密鑰的API,證書簽發和管理中的配置檔案機製等等。如果你有足夠的耐心,將會在深入使用OpenSSL的過程慢慢發現很多這樣的小功能,讓你不斷有新的驚喜。

演算法

密鑰和證書管理

密鑰和證書管理是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),實現了證書簽發的整個流程和證書管理的大部分機製。

5.SSL和TLS協定

OpenSSL實現了SSL協定的SSLv2和SSLv3,支持了其中絕大部分演算法協定。OpenSSL也實現了TLSv1.0,TLS是SSLv3的標準化版,雖然區別不大,但畢竟有很多細節不盡相同。

雖然已經有眾多的軟體實現了OpenSSL的功能,但是OpenSSL裏面實現的SSL協定能夠讓我們對SSL協定有一個更加清楚的認識,因為至少存在兩點:一是OpenSSL實現的SSL協定是開放原始碼的,我們可以追究SSL協定實現的每一個細節;二是OpenSSL實現的SSL協定是純粹的SSL協定,沒有跟其它協定(如HTTP)協定結合在一起,澄清了SSL協定的本來面目。

對稱加密演算法

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一共實現了4種非對稱加密演算法,包括DH演算法、RSA演算法、DSA演算法橢圓曲線演算法(EC)。DH演算法一般用于密鑰交換。RSA演算法既可以用于密鑰交換,也可以用于數位簽名,當然,如果你能夠忍受其緩慢的速度,那麽也可以用于資料加密DSA演算法則一般隻用于數位簽名

信息摘要演算法

OpenSSL實現了5種信息摘要演算法,分別是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA演算法事實上包括了SHA和SHA1兩種信息摘要演算法。此外,OpenSSL還實現了DSS標準中規定的兩種信息摘要演算法DSS和DSS1。

套用

功能

OpenSSL的應用程式已經成為了OpenSSL重要的一個組成部分,其重要性恐怕是OpenSSL的開發者開始沒有想到的。如OpenCA,就是完全使用OpenSSL的應用程式實現的。OpenSSL的應用程式是基于OpenSSL的密碼演算法庫和SSL協定庫寫成的,所以也是一些非常好的OpenSSL的API使用範例,讀懂所有這些範例,你對OpenSSL的API使用了解就比較全面了,當然,這也是一項鍛煉你的意志力的工作。

OpenSSL的應用程式提供了相對全面的功能,在相當多的人看來,OpenSSL已經為自己做好了一切,不需要再做更多的開發工作了,所以,他們也把這些應用程式成為OpenSSL的指令。OpenSSL的應用程式主要包括密鑰生成、證書管理、格式轉換、資料加密和簽名、SSL測試以及其它輔助配置功能。

機製

Engine機製 Engine機製的出現是在OpenSSL的0.9.6版的事情,開始的時候是將普通版本跟支持Engine的版本分開的,到了OpenSSL的0.9.7版,Engine機製集成到了OpenSSL的核心中,成為了OpenSSL不可缺少的一部分。 Engine機製目的是為了使OpenSSL能夠透明地使用第三方提供的軟體加密庫或者硬體加密設備進行加密。OpenSSL的Engine機製成功地達到了這個目的,這使得OpenSSL已經不僅僅使一個加密庫,而是提供了一個通用地加密接口,能夠與絕大部分加密庫或者加密設備協調工作。當然,要使特定加密庫或加密設備OpenSSL協調工作,需要寫少量的接口代碼,但是這樣的工作量並不大,雖然還是需要一點密碼學的知識。Engine機製的功能跟Windows提供的CSP功能目標是基本相同的。包括:CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare以及IBM 4758 CCA的硬體加密設備。當然,所有上述Engine接口支持不一定很全面,比如,可能支持其中一兩種公開密鑰演算法。

漏洞

發現

2014年4月8日,OpenSSL的大漏洞曝光。這個漏洞被曝光的黑客命名為"heartbleed",意思是"心髒流血"--代表著最致命的內傷。利用該漏洞,黑客坐在自己家裏電腦前,就可以即時獲取到約30%https開頭網址的使用者登錄賬號密碼,包括大批網銀、購物網站、電子郵件等。

"心髒流血"首先被谷歌(微博)研究員尼爾·梅塔(Neel Mehta)發現,它可從特定伺服器上隨機獲取64k的工作日志,由于資料是隨機獲取的,所以攻擊者也不一定可以獲得想要的信息,因此整個過程如同釣魚,攻擊可能一次次持續進行,大量敏感資料可能泄露。由于一台伺服器的密鑰也記錄在其工作日志中,並且在大量資料中可被輕易辨別,因此將是首當其沖的獲取目標,獲取密鑰後,攻擊者可以掌握某網站或服務的即時流量情況,甚至可以破解被加密的以往流量日志。

安全專家介紹說,OpenSSL此漏洞堪稱網路核彈,網銀、網購、網上支付、信箱等眾多網站受其影響。無論使用者電腦多麽安全,隻要網站使用了存在漏洞的OpenSSL版本,使用者登錄該網站時就可能被黑客即時監控到登錄賬號和密碼。

根據相關媒體的報導,研究人員發現OpenSSL漏洞遍及全球網際網路公司,並為其起了個形象的名字"心髒出血",中國超過3萬台主機受波及,國區域網路站和安全廠商技術人員為檢查、搶修徹夜未眠。截至昨天,有超30%的主機已經修復,但技術人士稱,消費者敏感信息是否泄露還有待日後觀察。

成因

此次漏洞的成因是OpenSSL Heartbleed模組存在一個BUG,當攻擊者構造一個特殊的封包,滿足使用者心跳包中無法提供足夠多的資料會導致memcpy把SSLv3記錄之後的資料直接輸出,該漏洞導致攻擊者可以遠程讀取存在漏洞版本的OpenSSL伺服器記憶體中長達64K的資料。

"心髒流血"這個名字聽起來有點誇張,但這個漏洞的威力似乎當得起它的名字。不管是從可能感染的電腦數量還是從可能被泄露的資料規模,"心髒流血"的破壞力都超過在2014年早些時候狠狠羞辱了蘋果公司的"GoToFail "漏洞。"心髒流血"漏洞可以幫助黑客獲得開啟伺服器的密鑰,監聽伺服器資料和流量。更糟糕的是,這並不是一個新的漏洞, "心髒流血"其實已經存在兩年了,但具體何時被人發現其危險性尚不得而知。

補救措施

在各個網站尚未解決安全漏洞的近兩天,使用者盡量不登錄或者少登錄涉及資金、個人隱私的網站或系統,已經多次登錄的使用者請盡快修改密碼、綁定手機、設定支付密碼,最好採用手機令牌類軟體如號令手機令牌等,確保通過即時變化的動態口令保障賬號安全。

漏洞攔截

備受關註的OpenSSL"心髒出血"漏洞有了最新進展:不法分子可以通過漏洞獲取網站私鑰,並通過盜取的證書偽造假冒網站,或可躲避一些安全軟體及安全流覽器的攔截。

漏洞風險

此前曝出的"心血漏洞"由于影響範圍之廣而引起了國內網際網路業界及使用者的極大關註。黑客可能利用"心髒出血"漏洞,攻擊網民的個人電腦,盜取帳號密碼、登入識別cookies、網銀密鑰等私密資料。

漏洞影響

據專家介紹,由于Windows上用OpenSSL的軟體很多,且多數使用自己安裝目錄下的 SSLeay32.dll 和 Libeay32.dll,沒有統一的升級管理機製,該漏洞可能會長期存在。

專家解釋,由于網站證書被認為是網址安全可信的標志,因此黑客會利用漏洞盜取網站私鑰從而冒名頂替合格的網站證書。此種情況下,安全系統或防毒軟體很可能不能判斷網站的真實性。

主要版本

版本發布時間備註
老版本,不再支持: 0.9.1c1998年12月23日
老版本,不再支持: 0.9.2c1999年3月22日取代0.9.1c
老版本,不再支持: 0.9.31999年5月25日

取代0.9.2b

老版本,不再支持: 0.9.41999年8月9日

取代0.9.3a

老版本,不再支持: 0.9.52000年2月28日

取代0.9.4

老版本,不再支持: 0.9.62000年9月25日

取代0.9.5a

老版本,不再支持: 0.9.72002年12月31日

取代0.9.6h

老版本,不再支持: 0.9.82005年7月5日

取代0.9.7h

老版本,不再支持: 1.0.02010年3月29日

取代0.9.8x

老版本,不再支持: 1.0.12012年3月14日

取代1.0.0e

支持TLS v1.2

SRP支持

當前穩定版本:1.0.1g2014年4月7日

當前版本

修補"血崩"

漏洞

安裝方法

OpenSSL的編譯安裝需Perl的支持,下載最新版ActivePerl和OpenSSL源碼包。

安裝ActivePerl。

執行VC安裝目錄下vcvarsall.bat 配置默認環境。

進入openssl目錄,執行如下指令(X64環境)

> perl Configure VC-WIN64A

> msdo_win64a

> nmake -f msntdll.mak

> cd out32dll

> ..mstest

具體詳情可參考openssl目錄下Install.w32等檔案。

相關詞條

其它詞條