為您解碼網(wǎng)站建設(shè)的點點滴滴
發(fā)表日期:2018-04 文章編輯:小燈 瀏覽次數(shù):2793
本文適合對 HTTP 傳輸原理有一定了解,并有意進一步了解 HTTPS 傳輸原理的人。
關(guān)于 HTTP 原理的了解,建議阮一峰老師的文章 HTTP 協(xié)議入門
HTTPS 不是一個新鮮的協(xié)議,它仍然是基于 HTTP 協(xié)議,可以把 HTTPS 協(xié)議看成是穿著防彈衣的 HTTP 協(xié)議,協(xié)議層對比如下圖:
基于 HTTP 協(xié)議的網(wǎng)絡(luò)傳輸是明文的,對響應(yīng)的內(nèi)容也不加驗證,這意味著只要傳輸內(nèi)容被黑客截獲,黑客就能知道傳輸內(nèi)容,甚至能夠返回一段修改后的內(nèi)容給用戶。這就是常說的 HTTP 劫持,一些運營商會使用這種手段往用戶的網(wǎng)頁里注入廣告。
連接不安全 WiFi 后被竊取個人信息,以及被一些運營商注入廣告是 HTTP 劫持的兩種常見場景。所以棍子哥提醒您:不要隨意連接使用陌生 WiFi 哦~
講解 HTTPS 傳輸原理前,讓我們來先了解幾個故事輕松一下(已了解對稱加密和非對稱加密的朋友可以跳過這個段落)。
1. HTTP 的故事
小馬讀小學(xué)的時候就開始給小燕寫情書,每次都是把折好的情書交給小明,由小明轉(zhuǎn)交給小燕,最后小燕讀到小馬的情書。
這其實就是 HTTP 傳輸原理最簡單的描述。小馬代表瀏覽器,小明代表網(wǎng)絡(luò)傳輸過程,小燕代表服務(wù)器。從這個故事很容易看出,小明可以輕而易舉地偷看小馬的情書。
2. HTTPS 的故事
很快,小馬和小燕讀初中了,他們也開始意識到情書可能會被小明偷看,于是小馬想了一個辦法。小馬和小燕私下里協(xié)商好一套文字映射表,比如用 A 代表“我”,用 B 代表“愛”,用 C 代表“你”。當(dāng)小馬想在情書里寫“我愛你”的時候,小馬就寫“ABC”,當(dāng)小燕收到情書后就拿出文字映射表,把“ABC”翻譯成“我愛你”。這樣,即使小明偷看情書,小明也只知道情書的內(nèi)容是“ABC”,并不知道真實的內(nèi)容。
這就是 HTTPS 的基本原理,但過程會稍微復(fù)雜一點,接下來我們再了解幾個概念做知識儲備。
加密和解密使用同樣秘鑰的加密算法稱之為對稱加密。像上述小馬和小燕之間使用同樣的文字映射表進行的加密方式就屬于對稱加密。對稱加密算法的優(yōu)點是執(zhí)行快,缺點是安全性較低,如果秘鑰被第三方知道的話就泄密了。
加密和解密使用不同秘鑰的加密算法稱之為非對稱加密。非對稱加密有兩個秘鑰——公開秘鑰和私有秘鑰(下文簡稱公鑰和私鑰),公鑰用來加密,私鑰用來解密,以公鑰加密的內(nèi)容只能使用私鑰解密。這樣的話,私鑰只會讓自己知道,公鑰的話可以讓任何人知道,保證了安全。但非對稱加密的的缺點是執(zhí)行慢。
非對稱加密的原理異常復(fù)雜,非三言兩語能夠解釋清楚,這里大家只需要知道公鑰加密只有私鑰能夠解密就足夠了。如果有求知欲特別強的朋友硬要了解非對稱加密的原理,棍子哥個建議閱讀阮一峰老師的 RSA 算法原理
時序圖真的是個好東西,讓我們先以時序圖的方式瞧一瞧 HTTPS 的整體流程,然后再一一做解釋:
如果你能完全看懂時序圖,那么恭喜你,可以不用浪費時間往下看了,如果你對時序圖心存疑問,那么我們就來一一了解時序圖中的每一個步驟。
細心的朋友可能會問:服務(wù)器的公鑰、私鑰從何而來?瀏覽器如何校驗公鑰的正確性?如果你有這樣的疑問,說明你對 HTTP 的傳輸過程還是很了解的。
對應(yīng)如圖的紅框①區(qū)域,瀏覽器在整個通信的最開始會請求服務(wù)器的公鑰(其實是證書,下文會說明),這里的公鑰就是我們常說的 SSL 證書的一部分了。關(guān)于 SSL 證書,一般是由專門機構(gòu)(CA 機構(gòu))頒發(fā),其實也就是頒發(fā)幾個文件,其中有包含私鑰信息的文件和包含公鑰信息的文件,私鑰文件一直秘密地保存在服務(wù)器,不會公布出去,公鑰文件會在這次請求中下發(fā)給瀏覽器。
公鑰文件除了包含有公鑰信息外,還有其他信息比如域名、頒發(fā)機構(gòu)、有效期等等。具體大家在 Chrome 上點擊任意帶有綠色鎖圖標(biāo)的網(wǎng)站的綠色鎖圖標(biāo),然后展開細節(jié)查看。
對應(yīng)圖 3-1 的綠色框區(qū)域②。圖中為了簡單易懂,說服務(wù)器返回的是公鑰,這并不準(zhǔn)確,服務(wù)器其實是返回了包含公鑰的證書。每一個證書都包含域名信息,操作系統(tǒng)也維護了一個可信的證書列表。當(dāng)瀏覽器獲得服務(wù)器返回的證書后,提取證書里的域名、辦法機構(gòu)等信息,然后根據(jù)本地的可信證書列表判斷該證書是否可信,然后才提取證書里的公鑰并接著和服務(wù)器通信,否則給出警告。以 Chrome 為例,當(dāng)證書不可信時,Chrome 會提示如下圖所示的界面,并且在地址欄顯示紅色的不安全警告,當(dāng)用戶點擊“高級 - 繼續(xù)前往 xxx (不安全)”后才可以打開該網(wǎng)頁。
一般來說,高質(zhì)量的 SSL 證書需要購買,而且價格不菲。如果對站點的要求沒有那么高,也可以在一些網(wǎng)站上申請免費證書,比如SSL證書選購 - 騰訊云、SSL For Free。
對應(yīng)圖 3-1 的藍色框部分③。當(dāng)瀏覽器信任證書并提取證書里的公鑰后,會隨機再生成一條臨時公鑰。然后瀏覽器用證書的公鑰加密臨時公鑰并發(fā)送給服務(wù)器,服務(wù)器收到后用證書里私鑰解密內(nèi)容得到臨時公鑰。這這里開始進入第④步后,瀏覽器和服務(wù)器都知道了臨時公鑰的值,之后的通信,瀏覽器和服務(wù)器都將使用該臨時公鑰對傳出內(nèi)容進行對稱加解密。
臨時公鑰的用途是為了加解密之后真正的傳輸內(nèi)容,它在每次 HTTPS 的傳輸過程都不同,而證書里的公鑰是始終保持不變的(除非更換了證書)。
對應(yīng)圖 3-1 的黃色框部分④。以上三步其實都處于握手階段,到這一步 HTTPS 才真正進入內(nèi)容傳輸階段。這之前,瀏覽器和服務(wù)器已經(jīng)通過非對稱加密的方式交換了一個臨時公鑰,保證沒有第三方知道這個臨時公鑰,之后進行內(nèi)容傳輸?shù)臅r候瀏覽器和服務(wù)器雙方都將使用該臨時公鑰對稱加密。之所以到傳輸階段選擇使用對稱加密的方式是因為對稱加密的方式執(zhí)行快。
這就是 HTTPS 的基本原理啦,如果對您有幫助的話請動動手指轉(zhuǎn)發(fā)給更多有需要的人。如果有說錯的地方,還請評論留言,大家一起改進。
下期預(yù)告:webpack 實戰(zhàn)教程
日期:2018-04 瀏覽次數(shù):6777
日期:2017-02 瀏覽次數(shù):3456
日期:2017-09 瀏覽次數(shù):3676
日期:2017-12 瀏覽次數(shù):3544
日期:2018-12 瀏覽次數(shù):4843
日期:2016-12 瀏覽次數(shù):4595
日期:2017-07 瀏覽次數(shù):13659
日期:2017-12 瀏覽次數(shù):3522
日期:2018-06 瀏覽次數(shù):4279
日期:2018-05 瀏覽次數(shù):4458
日期:2017-12 瀏覽次數(shù):3570
日期:2017-06 瀏覽次數(shù):3995
日期:2018-01 瀏覽次數(shù):3958
日期:2016-12 瀏覽次數(shù):3925
日期:2018-08 瀏覽次數(shù):4441
日期:2017-12 瀏覽次數(shù):3733
日期:2016-09 瀏覽次數(shù):6453
日期:2018-07 瀏覽次數(shù):3223
日期:2016-12 瀏覽次數(shù):3241
日期:2018-10 瀏覽次數(shù):3396
日期:2018-10 瀏覽次數(shù):3503
日期:2018-09 瀏覽次數(shù):3593
日期:2018-02 瀏覽次數(shù):3611
日期:2015-05 瀏覽次數(shù):3538
日期:2018-09 瀏覽次數(shù):3318
日期:2018-06 瀏覽次數(shù):3448
日期:2017-02 瀏覽次數(shù):3884
日期:2018-02 瀏覽次數(shù):4347
日期:2018-02 瀏覽次數(shù):4191
日期:2016-12 瀏覽次數(shù):3587
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.