天天看點

HTTPS那些事(一)HTTPS原理

楔子

謠言粉碎機前些日子釋出的《​​用公共wifi上網會危害銀行賬戶安全嗎?​​》,文中介紹了在使用https進行網絡加密傳輸的一些情況,從回複來看,争議還是有的。随着網絡越來越普及,應用越來越廣泛,一些網絡安全問題也會越來越引起網民的關注,在這裡和大家一起聊聊tls/ssl也就是我們常說的https,從原理到實際應用看清它到底是怎麼一回事,以及在使用https要注意哪些問題以及相關的安全技巧。

網絡安全是一個整體的事件,涉及到個人計算機的安全,協定的安全,傳輸資料的安全,以及軟體開發公司和網站的安全,單純的依靠一個https協定并不能解決所有的問題。希望通過今後一點一點的對安全相關的問題進行說明解釋,能讓更多人對網絡安全有所了解,進而更安全的使用網絡。

文章會比較長,暫時計劃分成三個部分:

第一部分主要描述https的原理;第二部分主要描述ssl證書驗證的過程與使用的一些注意事項;第三部分會呈現一些針對https攻擊的執行個體。如果有需要,我會後續的補充一些内容。

我盡量使用最簡潔的語言來描述相關的概念,這裡開始先挖個坑,然後慢慢地填。

​​https那些事(二)ssl證書​​​​https那些事(三)攻擊執行個體與防禦​​

一、什麼是https

在說https之前先說說什麼是http,http就是我們平時浏覽網頁時候使用的一種協定。http協定傳輸的資料都是未加密的,也就是明文的,是以使用http協定傳輸隐私資訊非常不安全。為了保證這些隐私資料能加密傳輸,于是網景公司設計了ssl(secure sockets layer)協定用于對http協定傳輸的資料進行加密,進而就誕生了https。ssl目前的版本是3.0,被ietf(internet engineering task force)定義在rfc 6101中,之後ietf對ssl 3.0進行了更新,于是出現了tls(transport layer security) 1.0,定義在rfc 2246。實際上我們現在的https都是用的tls協定,但是由于ssl出現的時間比較早,并且依舊被現在浏覽器所支援,是以ssl依然是https的代名詞,但無論是tls還是ssl都是上個世紀的事情,ssl最後一個版本是3.0,今後tls将會繼承ssl優良血統繼續為我們進行加密服務。目前tls的版本是1.2,定義在rfc 5246中,暫時還沒有被廣泛的使用。

對曆史感興趣的朋友可以參考​​http://en.wikipedia.org/wiki/transport_layer_security​​,這裡有對tls/ssl詳盡的叙述。

二、https到底安全嗎?

這個答案是肯定的,很安全。谷歌公司已經行動起來要大力推廣https的使用,在未來幾周,谷歌将對全球所有本地域名都啟用https,使用者隻要在搜尋前用google帳号登入,之後所有的搜尋操作都将使用tls協定加密,見:​​http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/​​。

三、https的工作原理

https在傳輸資料之前需要用戶端(浏覽器)與服務端(網站)之間進行一次握手,在握手過程中将确立雙方加密傳輸資料的密碼資訊。tls/ssl協定不僅僅是一套加密傳輸的協定,更是一件經過藝術家精心設計的藝術品,tls/ssl中使用了非對稱加密,對稱加密以及hash算法。握手過程的簡單描述如下:

1.浏覽器将自己支援的一套加密規則發送給網站。

2.網站從中選出一組加密算法與hash算法,并将自己的身份資訊以證書的形式發回給浏覽器。證書裡面包含了網站位址,加密公鑰,以及證書的頒發機構等資訊。

3.獲得網站證書之後浏覽器要做以下工作:

a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站位址是否與正在通路的位址一緻等),如果證書受信任,則浏覽器欄裡面會顯示一個小鎖頭,否則會給出證書不受信的提示。

b) 如果證書受信任,或者是使用者接受了不受信的證書,浏覽器會生成一串随機數的密碼,并用證書中提供的公鑰加密。

c) 使用約定好的hash計算握手消息,并使用生成的随機數對消息進行加密,最後将之前生成的所有資訊發送給網站。

4.網站接收浏覽器發來的資料之後要做以下的操作:

a) 使用自己的私鑰将資訊解密取出密碼,使用密碼解密浏覽器發來的握手消息,并驗證hash是否與浏覽器發來的一緻。

b) 使用密碼加密一段握手消息,發送給浏覽器。

5.浏覽器解密并計算握手消息的hash,如果與服務端發來的hash一緻,此時握手過程結束,之後所有的通信資料将由之前浏覽器生成的随機密碼并利用對稱加密算法進行加密。

這裡浏覽器與網站互相發送加密的握手消息并驗證,目的是為了保證雙方都獲得了一緻的密碼,并且可以正常的加密解密資料,為後續真正資料的傳輸做一次測試。另外,https一般使用的加密與hash算法如下:

非對稱加密算法:rsa,dsa/dss

對稱加密算法:aes,rc4,3des

hash算法:md5,sha1,sha256

其中非對稱加密算法用于在握手過程中加密生成的密碼,對稱加密算法用于對真正傳輸的資料進行加密,而hash算法用于驗證資料的完整性。由于浏覽器生成的密碼是整個資料加密的關鍵,是以在傳輸的時候使用了非對稱加密算法對其加密。非對稱加密算法會生成公鑰和私鑰,公鑰隻能用于加密資料,是以可以随意傳輸,而網站的私鑰用于對資料進行解密,是以網站都會非常小心的保管自己的私鑰,防止洩漏。

tls握手過程中如果有任何錯誤,都會使加密連接配接斷開,進而阻止了隐私資訊的傳輸。正是由于https非常的安全,攻擊者無法從中找到下手的地方,于是更多的是采用了假證書的手法來欺騙用戶端,進而擷取明文的資訊,但是這些手段都可以被識别出來,我将在後續的文章進行講述。不過2010年還是有安全專家發現了tls 1.0協定處理的一個漏洞:​​http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/​​,實際上這種稱為beast的攻擊方式早在2002年就已經被安全專家發現,隻是沒有公開而已。目前微軟和google已經對此漏洞進行了修複。見:​​http://support.microsoft.com/kb/2643584/en-us​​​​https://src.chromium.org/viewvc/chrome?view=rev&revision=90643​​

繼續閱讀