(一)、http原理
謠言粉碎機(jī)前些日子發(fā)布的《用公共WiFi上網(wǎng)會危害銀行賬戶安全嗎?》,文中介紹了在使用HTTPS進(jìn)行網(wǎng)絡(luò)加密傳輸?shù)囊恍┣闆r,從回復(fù)來看,爭議還是有的。隨著網(wǎng)絡(luò)越來越普及,應(yīng)用越來越廣泛,一些網(wǎng)絡(luò)安全問題也會越來越引起網(wǎng)民的關(guān)注,在這里和大家一起聊聊TLS/SSL也就是我們常說的HTTPS,從原理到實(shí)際應(yīng)用看清它到底是怎么一回事,以及在使用HTTPS要注意哪些問題以及相關(guān)的安全技巧。
網(wǎng)絡(luò)安全是一個整體的事件,涉及到個人計算機(jī)的安全,協(xié)議的安全,傳輸數(shù)據(jù)的安全,以及軟件開發(fā)公司和網(wǎng)站的安全,單純的依靠一個HTTPS協(xié)議并不能解決所有的問題。希望通過今后一點(diǎn)一點(diǎn)的對安全相關(guān)的問題進(jìn)行說明解釋,能讓更多人對網(wǎng)絡(luò)安全有所了解,從而更安全的使用網(wǎng)絡(luò)。
文章會比較長,暫時計劃分成三個部分:
第一部分主要描述HTTPS的原理;第二部分主要描述SSL證書驗證的過程與使用的一些注意事項;第三部分會呈現(xiàn)一些針對HTTPS攻擊的實(shí)例。如果有需要,我會后續(xù)的補(bǔ)充一些內(nèi)容。
我盡量使用最簡潔的語言來描述相關(guān)的概念,這里開始先挖個坑,然后慢慢地填。
HTTPS那些事(三)攻擊實(shí)例與防御
一、什么是HTTPS
在說HTTPS之前先說說什么是HTTP,HTTP就是我們平時瀏覽網(wǎng)頁時候使用的一種協(xié)議。HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,也就是明文的,因此使用HTTP協(xié)議傳輸隱私信息非常不安全。為了保證這些隱私數(shù)據(jù)能加密傳輸,于是網(wǎng)景公司設(shè)計了SSL(Secure Sockets Layer)協(xié)議用于對HTTP協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密,從而就誕生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定義在RFC 6101中,之后IETF對SSL 3.0進(jìn)行了升級,于是出現(xiàn)了TLS(Transport Layer Security) 1.0,定義在RFC 2246。實(shí)際上我們現(xiàn)在的HTTPS都是用的TLS協(xié)議,但是由于SSL出現(xiàn)的時間比較早,并且依舊被現(xiàn)在瀏覽器所支持,因此SSL依然是HTTPS的代名詞,但無論是TLS還是SSL都是上個世紀(jì)的事情,SSL最后一個版本是3.0,今后TLS將會繼承SSL優(yōu)良血統(tǒng)繼續(xù)為我們進(jìn)行加密服務(wù)。目前TLS的版本是1.2,定義在RFC 5246中,暫時還沒有被廣泛的使用。
對歷史感興趣的朋友可以參考http://en.wikipedia.org/wiki/Transport_Layer_Security,這里有對TLS/SSL詳盡的敘述。
二、HTTPS到底安全嗎?
這個答案是肯定的,很安全。谷歌公司已經(jīng)行動起來要大力推廣HTTPS的使用,在未來幾周,谷歌將對全球所有本地域名都啟用HTTPS,用戶只要在搜索前用Google帳號登錄,之后所有的搜索操作都將使用TLS協(xié)議加密,見:http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/。
三、HTTPS的工作原理
HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息。TLS/SSL協(xié)議不僅僅是一套加密傳輸?shù)膮f(xié)議,更是一件經(jīng)過藝術(shù)家精心設(shè)計的藝術(shù)品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的簡單描述如下:
1.瀏覽器將自己支持的一套加密規(guī)則發(fā)送給網(wǎng)站。
2.網(wǎng)站從中選出一組加密算法與HASH算法,并將自己的身份信息以證書的形式發(fā)回給瀏覽器。證書里面包含了網(wǎng)站地址,加密公鑰,以及證書的頒發(fā)機(jī)構(gòu)等信息。
3.獲得網(wǎng)站證書之后瀏覽器要做以下工作:
a) 驗證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法,證書中包含的網(wǎng)站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄里面會顯示一個小鎖頭,否則會給出證書不受信的提示。
b) 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機(jī)數(shù)的密碼,并用證書中提供的公鑰加密。
c) 使用約定好的HASH計算握手消息,并使用生成的隨機(jī)數(shù)對消息進(jìn)行加密,最后將之前生成的所有信息發(fā)送給網(wǎng)站。
4.網(wǎng)站接收瀏覽器發(fā)來的數(shù)據(jù)之后要做以下的操作:
a) 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發(fā)來的握手消息,并驗證HASH是否與瀏覽器發(fā)來的一致。
b) 使用密碼加密一段握手消息,發(fā)送給瀏覽器。
5.瀏覽器解密并計算握手消息的HASH,如果與服務(wù)端發(fā)來的HASH一致,此時握手過程結(jié)束,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對稱加密算法進(jìn)行加密。
這里瀏覽器與網(wǎng)站互相發(fā)送加密的握手消息并驗證,目的是為了保證雙方都獲得了一致的密碼,并且可以正常的加密解密數(shù)據(jù),為后續(xù)真正數(shù)據(jù)的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH算法如下:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
其中非對稱加密算法用于在握手過程中加密生成的密碼,對稱加密算法用于對真正傳輸?shù)臄?shù)據(jù)進(jìn)行加密,而HASH算法用于驗證數(shù)據(jù)的完整性。由于瀏覽器生成的密碼是整個數(shù)據(jù)加密的關(guān)鍵,因此在傳輸?shù)臅r候使用了非對稱加密算法對其加密。非對稱加密算法會生成公鑰和私鑰,公鑰只能用于加密數(shù)據(jù),因此可以隨意傳輸,而網(wǎng)站的私鑰用于對數(shù)據(jù)進(jìn)行解密,所以網(wǎng)站都會非常小心的保管自己的私鑰,防止泄漏。
TLS握手過程中如果有任何錯誤,都會使加密連接斷開,從而阻止了隱私信息的傳輸。正是由于HTTPS非常的安全,攻擊者無法從中找到下手的地方,于是更多的是采用了假證書的手法來欺騙客戶端,從而獲取明文的信息,但是這些手段都可以被識別出來,我將在后續(xù)的文章進(jìn)行講述。不過2010年還是有安全專家發(fā)現(xiàn)了TLS 1.0協(xié)議處理的一個漏洞:http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/,實(shí)際上這種稱為BEAST的攻擊方式早在2002年就已經(jīng)被安全專家發(fā)現(xiàn),只是沒有公開而已。目前微軟和Google已經(jīng)對此漏洞進(jìn)行了修復(fù)。見:http://support.microsoft.com/kb/2643584/en-ushttps://src.chromium.org/viewvc/chrome?view=rev&revision=90643
轉(zhuǎn)載于:https://www.cnblogs.com/Struts-pring/p/4305878.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的(一)、http原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QEMU 3.0.0 新特性一览
- 下一篇: 16.看板方法——三类改进机会笔记