在
下面我們來聊一聊 SSL握手先來看看 SSL握手
整個流程大概如下: 2.網(wǎng)站部署了一組SSL秘鑰,,分私鑰和秘鑰,。 3.網(wǎng)站從瀏覽器的加密規(guī)則中選出一組加密算法與HASH算法,并將自己的身份信息(公鑰)以證書的形式發(fā)回給瀏覽器,。證書里面包含了網(wǎng)站地址,,加密公鑰,以及證書的頒發(fā)機構(gòu)等信息,。 4.獲得網(wǎng)站證書之后瀏覽器要做以下工作: a) 驗證證書的合法性(頒發(fā)證書的機構(gòu)是否合法,,證書中包含的網(wǎng)站地址是否與正在訪問的地址一致等),如果證書受信任,,則瀏覽器欄里面會顯示一個小鎖頭,,否則會給出證書不受信的提示。 b) 如果證書受信任,,或者是用戶接受了不受信的證書,,瀏覽器會生成一串隨機數(shù)的密碼,并用證書中提供的公鑰加密。 c) 使用約定好的HASH計算握手消息,,并使用生成的隨機數(shù)對消息進行加密,。這個加密過程是非對稱加密,即公鑰加密,,私鑰解密,。私鑰只在網(wǎng)站服務(wù)器上存儲,其他人無法獲得這個私鑰,,也就無法解密??衫斫鉃楣€是鎖,,私鑰是鑰匙,客戶端將隨機數(shù)用公鑰鎖上,,經(jīng)過網(wǎng)絡(luò)傳輸?shù)椒?wù)器,,整個過程就算有人攔截了信息,由于沒有私鑰解鎖,,也就無法解密,。 過程如下圖: CA證書校驗
5.將生成的所有信息發(fā)送給網(wǎng)站。 6.網(wǎng)站接收瀏覽器發(fā)來的數(shù)據(jù)之后,,使用自己的私鑰將信息解密取出密碼,,使用密碼解密瀏覽器發(fā)來的握手消息,并驗證HASH是否與瀏覽器發(fā)來的一致,。 7.使用密碼加密一段握手消息,,發(fā)送給瀏覽器。 8.瀏覽器解密并計算握手消息的HASH,,如果與服務(wù)端發(fā)來的HASH一致,,此時握手過程結(jié)束,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機密碼并利用對稱加密算法進行加密,。 這里瀏覽器與網(wǎng)站互相發(fā)送加密的握手消息并驗證,,目的是為了保證雙方都獲得了一致的密碼,并且可以正常的加密解密數(shù)據(jù),,為后續(xù)真正數(shù)據(jù)的傳輸做一次測試,。 備注:非對稱加密算法用于在握手過程中加密生成的密碼,對稱加密算法用于對真正傳輸?shù)臄?shù)據(jù)進行加密,,而HASH算法用于驗證數(shù)據(jù)的完整性,。由于瀏覽器生成的密碼是整個數(shù)據(jù)加密的關(guān)鍵,因此在傳輸?shù)臅r候使用了非對稱加密算法對其加密,。非對稱加密算法會生成公鑰和私鑰,,公鑰只能用于加密數(shù)據(jù),因此可以隨意傳輸,而網(wǎng)站的私鑰用于對數(shù)據(jù)進行解密,,所以網(wǎng)站都會非常小心的保管自己的私鑰,,防止泄漏。 如何防劫持對于 舉個網(wǎng)上的例子,有人在知乎問過一個問題,。
這個黑客的攻擊就是通常說的中間人攻擊,,跳轉(zhuǎn)1.2.3.4就是DNS劫持,DNS被劫持到一個非源端的IP上,。我們根據(jù)上文SSL握手的流程來分析一下,,這種可能性是否存在。 首先如果黑客要跟你的瀏覽器建立SSL連接,,那么他需要有一個CA證書,,而通常系統(tǒng)內(nèi)置根證書都是大型機構(gòu)的根證書,幾乎無法偽造,。如果非要做一個只能是自簽名證書,。 Paste_Image.png
瀏覽器拿著對方的自簽名證書和系統(tǒng)證書進行校驗,結(jié)果一定是如下圖所示: Paste_Image.png
如果他要假冒其他機構(gòu)頒發(fā)證書,,因為沒有頒發(fā)機構(gòu)的秘鑰,,那么這個證書的指紋一定沒辦法對上,還是一樣會報警,。 Paste_Image.png
除非用戶自己主動導(dǎo)入一個自己信任的證書,。 12306
記住,不要隨便安裝受信任證書,,否則HTTPS也幫不了你,。我們平時為了調(diào)試 還有人就說了,我可以讓用戶回落到 看起來似乎中間人充當(dāng)了一個替換頁面里 但是只要利用HSTS(HTTP+Strict+Transport+Security,RFC6797)就可以解決這個問題,。通過在HTTP+Header中加入Strict-Transport-Security的聲明,,告訴瀏覽器在一定時間內(nèi)必須通過 這種情況下,,只要用戶曾經(jīng)在安全網(wǎng)絡(luò)環(huán)境下訪問過一次某站,中間人在指定時間內(nèi)也無法讓其回落到 解決完DNS劫持,,再看內(nèi)容劫持就簡單多了。 你作為一個中間人,,你沒有服務(wù)器私鑰A,,是不能解密客戶端發(fā)送的內(nèi)容的,如果你沒有客戶端自己生成的密鑰B,,所以你也不能解密客戶端發(fā)過去的內(nèi)容的,。 總結(jié): CharlesPaste_Image.png
上文中提到利用Charles抓取HTTPS數(shù)據(jù),看看下圖就知道了,。 電腦端配置根證書 Paste_Image.png
Paste_Image.png
移動端的證書信任圖 Paste_Image.png
如果你對Charles的自簽名證書選擇不信任,,那么Charles也無法做到中間人解密。 整個過程:手機----》Charles ----》 服務(wù)器,, Charles 即充當(dāng)了服務(wù)端又充當(dāng)了客戶端,,才使得數(shù)據(jù)能夠正常的交互,在一次請求中數(shù)據(jù)被兩次加解密,,一次是手機到Charles,,一次是Charles到真正的服務(wù)端。這個過程中最重要的一環(huán)就是手機端安裝的根證書,! 參考文章
|
|
來自: 熊掌大俠 > 《SSL&HTTPS》