楔子
謠言粉碎機前些日子發布的《用公共wifi上網會危害銀行賬戶安全嗎?》,文中介紹了在使用https進行網路加密傳輸的一些情況,從回覆來看,爭議還是有的。隨著網路越來越普及,應用越來越廣泛,一些網路安全問題也會越來越引起網民的關注,在這裡和大家一起聊聊tls/ssl也就是我們常說的https,從原理到實際應用看清它到底是怎麼一回事,以及在使用https要注意哪些問題以及相關的安全技巧。
網路安全是乙個整體的事件,涉及到個人計算機的安全,協議的安全,傳輸資料的安全,以及軟體開發公司和**的安全,單純的依靠乙個https協議並不能解決所有的問題。希望通過今後一點一點的對安全相關的問題進行說明解釋,能讓更多人對網路安全有所了解,從而更安全的使用網路。
文章會比較長,暫時計畫分成三個部分:
第一部分主要描述https的原理;第二部分主要描述ssl證書驗證的過程與使用的一些注意事項;第三部分會呈現一些針對https攻擊的例項。如果有需要,我會後續的補充一些內容。
我盡量使用最簡潔的語言來描述相關的概念,這裡開始先挖個坑,然後慢慢地填。
https那些事(二)ssl證書一、什麼是httpshttps那些事(三)攻擊例項與防禦
在說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中,暫時還沒有被廣泛的使用。
對歷史感興趣的朋友可以參考這裡有對tls/ssl詳盡的敘述。
二、https到底安全嗎?
這個答案是肯定的,很安全。谷歌公司已經行動起來要大力推廣https的使用,在未來幾周,谷歌將對全球所有本地網域名稱都啟用https,使用者只要在搜尋前用google帳號登入,之後所有的搜尋操作都將使用tls協議加密,見:
三、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非常的安全,攻擊者無法從中找到下手的地方,於是更多的是採用了假證書的手法來欺騙客戶端,從而獲取明文的資訊,但是這些手段都可以被識別出來,我將在後續的文章進行講述。不過2023年還是有安全專家發現了tls 1.0協議處理的乙個漏洞:實際上這種稱為beast的攻擊方式早在2023年就已經被安全專家發現,只是沒有公開而已。目前微軟和google已經對此漏洞進行了修復。見:
https那些事(一)
公鑰 所有人都知道 私鑰 只有伺服器自己知道 公鑰加密資料,私鑰解密 只要能解密這個資料就代表是服務端 私鑰加密,公鑰解密 所有人都可以知道,但是沒人能對解析出來的資料 二次偽造 因為私鑰只存在在服務端 1 客戶端獲取伺服器公鑰以及加密演算法 2 客戶端 服務端 客戶端用公鑰加密乙個隨機數rd,加密...
HTTP與HTTPS握手的那些事
前提 在講述這兩個握手時候,有一些東西需要提前說明。http與tcp ip區別?tpc ip協議是傳輸層協議,主要解決資料如何在網路中傳輸,而http是應用層協議,主要解決如何包裝資料。web使用http協議作應用層協議,以封裝http 文字資訊,然後使用tcp ip做傳輸層協議將它發到網路上。下面...
HTTP與HTTPS握手的那些事
前提 在講述這兩個握手時候,有一些東西需要提前說明。http與tcp ip區別?tpc ip協議是傳輸層協議,主要解決資料如何在網路中傳輸,而http是應用層協議,主要解決如何包裝資料。web使用http協議作應用層協議,以封裝http 文字資訊,然後使用tcp ip做傳輸層協議將它發到網路上。下面...