SSL/OPENSSL筆記

SSL&OPENSSL

如果訪問某寶,細心的朋友會發現,該網站已經從 http協議轉變成了https協議。

http一直是明文傳輸了,對於某寶這樣體量的網站,會遇到哪些問題呢? 爲什麼某寶需要從http協議更改成https呢?

舉個栗子:

運營商劫持

用戶在某寶網搜索羽絨服,發起請求之後,網站根據內部核心的算法和數據推算,向用戶返回返回網站認爲現在最好的top40個羽絨服的時候,一些地方的運營商,可以截獲某寶的http包,然後篡改其內容。比如:插入4件質量低下的羽絨服置頂。 這是一個很恐怖的事情,相當於直接改變了某寶的排序規則,很多不法商家在退貨率極高,次品率極高的情況下,能直接聯繫運營商,強行展示在用戶面前。這不僅傷害了網站運營者,也直接傷害了用戶的購買體驗。

如果切換成https協議,那麼這類事件將不會發生。

https協議是在http協議的基礎上增加了ssl層。

SSL&TLS

SSL(Secure Sockets Layer)即安全套接字,設計目的是Web的安全傳輸,不過由於被發現存在漏洞,IETF將SSL作了標準化,即RFC2246,並將其稱爲TLS(Transport Layer Security)。
具體消息:2014年10月,Google發佈在SSL 3.0中發現設計缺陷,建議禁用此一協議。攻擊者可以向TLS發送虛假錯誤提示,然後將安全連接強行降級到過時且不安全的SSL 3.0,然後就可以利用其中的設計漏洞竊取敏感信息。Google在自己公司相關產品中陸續禁止向後兼容,強制使用TLS協議。Mozilla也會計劃於11月25日發佈的Firefox 34中,將徹底禁用SSL 3.0。微軟也同樣發出了安全通告。
關於TLS中文維基有很詳細的描述,這裏不再贅述。鏈接地址(需翻牆)

openssl

openssl,是目前被廣泛應用的ssl的一個開源實現。 apache基金會的很多開源項目也都直接間接的引用openssl的實現。
其主要庫是以C語言所寫成,實現了基本的加密功能,實現了SSL與TLS協議。OpenSSL可以運行在絕大多數類Unix操作系統上(包括Solaris,Linux,Mac OS X與各種版本的開放源代碼BSD操作系統),OpenVMS與 Microsoft Windows。它也提供了一個移植版本,可以在IBM i(OS/400)上運作。

算法

OpenSSL支持多種不同的加密算法:

加密:
AES、Blowfish、Camellia、SEED、CAST-128、DES、IDEA、RC2、RC4、RC5、Triple DES、GOST 28147-89
散列函數:
MD5、MD2、SHA-1、SHA-2、RIPEMD-160、MDC-2、GOST R 34.11-94[3]
公開密鑰加密:
RSA、DSA、Diffie–Hellman key exchange、 Elliptic curve、GOST R 34.10-2001

某大牛說

“雖然openssl頻繁爆出漏洞,代碼實現很糟糕,甚至OpenBSD發起一個清理OpenSSL代碼的項目。。。但是世界還是離不開它!”—蘑菇街 安全團隊負責人 李潤哲

Heartbleed bug

給自己也科普一下轟動全球的漏洞。
openSSL 1.0.1版本(不含1.0.1g)含有一個嚴重漏洞,可允許攻擊者讀取服務器的內存信息。該漏洞影響三分之二的活躍網站
心血漏洞是一個出現在加密程序庫OpenSSL的程序錯誤,首次於2014年4月披露。該程序庫廣泛用於實現互聯網的傳輸層安全(TLS)協議。只要使用的是存在缺陷的OpenSSL實例,無論是服務器還是客戶端,都可能因此而受到攻擊。此問題的原因是在實現TLS的心跳擴展時沒有對輸入進行適當驗證(缺少邊界檢查),因此漏洞的名稱來源於“心跳”(heartbeat)。該程序錯誤屬於緩衝區過讀,即可以讀取的數據比應該允許讀取的還多。

因爲缺陷在於OpenSSL的實現,而不是SSL/TLS協議本身,所以除了OpenSSL之外的其他TLS實現方式,如GnuTLS和Mozilla的網絡安全服務(NSS)都未受影響。此外,微軟的產品或服務均不受影響。

Linux下的OPENSSL

對於像我這樣的初學者,可以把OPENSSL一個功能強大的工具包,因爲它集成了衆多密碼算法及實用工具。我們即可以利用它提供的命令臺工具生成密鑰、證書來加密解密文件,也可以在利用其提供的API接口在代碼中對傳輸信息進行加密。

查看openssl提供了哪些加密算法:

$ openssl list-cipher-commands

下面對文件進行加解密的例子,用了AES
給”myfile.txt” 進行加密,用AES 的CBC模式, 在shell裏運行:

$ openssl enc -aes-256-cbc -salt -in myfile.txt -out myfile.enc

會提示讓你輸入加密的密碼~之後就加密完成了。

解密:

$ openssl enc -d -aes-256-cbc -in myfile.enc -out myfile.txt

在代碼中使用的話,由於平時不做C++,就不進一步研究啦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章