早上看了一篇文HTTPS就安全了嗎?會被抓包嗎?看完這篇你有對答如流,本文是基於此文的總結。web
先默讀這張圖5分鐘: 算法
關於這個問題知乎有個自稱專業認識的回答瀏覽器如何驗證HTTPS證書的合法性?,咱也不是專業認識,就作個簡單的總結:瀏覽器
隨機數由客戶端生成,用來做爲對稱加密的祕鑰。安全
隨機數的傳輸,採用的是非對稱加密算法。app
客戶端:服務端公鑰+隨機數+加密算法 = 加密後的隨機數
tcp
服務端:加密後的隨機數+服務端私鑰+ 解密算法 = 隨機數
編輯器
傳輸過程,只有服務端公鑰是公開的,隨機數只有客戶端知道,服務端也只能經過私鑰得到隨機數。中間劫持者即便知道加解密算法,也沒法解密出隨機數。便可以保證以後的傳輸內容是沒法被解密出明文的。工具
採用隨機數加密傳輸內容是爲了提升通訊效率。flex
非對稱加解密算法複雜,執行耗時長,不利於雙方通訊。因此,https的核心是如何生成一個只有通訊雙方知道的祕鑰。原來這一堆證書其實都是爲這個隨機數存在的。加密
那麼問題來了,https創建在http的基礎上,斷開後再次鏈接隨機數是否會從新生成呢?
屢次嘗試發現,針對https資源請求,每次從新創建tcp鏈接時,Initial connection和SSL老是同時存在的,以下圖:
因此,tcp握手鍊接和SSL過程是一連串的動做,每次tcp鏈接創建過程會從新生成隨機數。
下圖是完整的https握手過程:
https的做用是避免傳輸過程被未知的第三方
劫持以及篡改數據。瀏覽器只認權威的證書,造假的證書是不會被瀏覽器信任的,因此理想狀況下能夠避免中間人篡改傳輸內容:
可是,若是中間人是客戶端使用者已知的且手動信任的第三方
呢?fiddler就是這樣的存在。當你想對https請求代理的時候,它會生成一個證書,名爲DO_NOT_TRUST_FifflerRoot,讓你下載安裝它,並標記爲可信任。
瀏覽器告訴你:「這個傢伙給了我一個野雞證書,不靠譜,我勸你當心點」
你: 「哦哦,你說的是fiddler啊,它我很熟的,你放心好了」
而後瀏覽器就不吭聲了,內心mmp: 「你愛咋咋地,反正我已經提醒過你了」。
fiddler基於被客戶端使用者信任的能力,能夠攔截並自定義任何請求任何返回內容。如線上代碼調試,fiddler能夠在代碼返回以前在特定位置插入調試代碼,或者直接返回包含調試代碼的本地代碼。
fiddler做爲一個超級工具,你還知道它的其它妙用嗎?
本文使用 mdnice 排版