1. 程式人生 > >10分鐘看懂HTTPS

10分鐘看懂HTTPS

HTTPS是為了彌補HTTP明文傳輸不安全的特性而產生的,下面由我通過一些自畫圖例來說明HTTPS如何保證傳輸的安全性。為了使整個說明過程顯得有趣生動點,我將瀏覽器和伺服器分別比喻成黃曉明和他的老婆Angelababy,還有一個黑客想要截獲他們之間交流的資訊(可能是想挖掘一些娛樂圈新聞吧)

初始場景的設定

初始化場景設定

假設我們使用的是HTTP,那麼由於HTTP的明文傳輸特性,Angelababy傳送給黃曉明的訊息被黑客截獲後,黑客可以很輕鬆的就知道訊息的含義,這樣以來A和黃之間的通訊就沒有私密可言,這可不是他們想要的結果。

A的對策:使用對稱加密

使用對稱加密

既然HTTP是明文傳輸,那麼A就決定將資訊加密再進行傳輸,於是他想到了對稱加密

,就是把要傳輸的資料用金鑰進行加密,並且加密後的資訊可以用金鑰進行解密,於是A先給黃髮了私鑰以確定兩人使用共同的金鑰,然後再傳輸加密資訊,可是,情況並沒有他們想象的簡單,黑客截獲了他們的金鑰,然後再把截獲的資訊用金鑰進行解密,於是,對稱加密失敗。

A的反擊:使用非對稱加密

使用非對稱加密

面對這種情況,A並沒有灰心,於是她又有了一個新的想法,使用非對稱加密,她使用一種非對稱加密演算法生成一對公鑰私鑰,並且用公鑰加密的資料只能由私鑰解密,而由私鑰加密的資料只能由公鑰解密,A傳送給黃曉明,黃在收到A的公鑰之後用這個公鑰對資訊進行加密然後將其傳送給A,A在收到後用她自己才有的私鑰進行解密,在這個過程中,即使黑客截獲了公鑰也沒卵用也無法將資訊解密,因為他沒有私鑰。面對這種結果,A和黃鬆了口氣,終於可以進行私密的交流了。

事情並沒有這麼簡單

事情並沒有這麼簡單

但是,事情就這樣順利地進展下去嗎?不不不,黑客面對這種情況還是有應對的法子,他模仿A的行為,自己用非對稱加密演算法生成了一對公鑰和私鑰,然後把自己偽裝成A把公鑰發給黃曉明,這樣以來,黃在不知情的情況下用黑客的公鑰加密然後將資料發出被黑客截獲,黑客截獲加密的資料之後用先前生成的私鑰進行解密,嘿,黑客又可以看到黃給A發的資訊了

A的應對

數字證書
A經過分析,黃是在無法判斷公鑰來源的情況下才會誤把黑客的公鑰當成自己的公鑰,於是她將自己的公鑰交給A和黃都信任的一個機構(CA),CA會將A的公鑰包裝成一個數字證書,然後A就可以將這個數字證書直接發給黃,黃在收到這個證書之後,就可以去驗證這個證書的合法性(瀏覽器自帶了證書驗證功能),如果合法就可以確定這個證書裡的公鑰是A,於是他就可以放心大膽地將資訊用這個公鑰進行加密然後傳輸了。

黑客的最後一搏

數字簽名

接下來就是公主和王子過上了安全私密的生活了嗎?還沒完!!!黑客惱羞成怒,打算最後一搏,他截獲A的公鑰,然後利用A的公鑰給這樣一段資訊加密“我們離婚吧”,企圖通過這種手段來拆散A和黃,接著偽裝成黃將加密的資訊發給A。面對這種情況,機智的黃想出了數字簽名的策略來應付黑客的這種偽裝手段,黃在傳送資料的時候會首先提取資料的摘要資訊(通過MD5演算法生成唯一的數字指紋),然後自己利用非對稱加密生成一對公鑰和私鑰,利用私鑰對於摘要資訊進行加密,然後將加密後摘要和資料用A的公鑰進行再次加密,將再次加密後的資料和黃的公鑰發給A,A收到資料之後用自己的私鑰解密,然後用MD5演算法對傳輸的資訊(也就是黃想要給A發的資訊)生成資料摘要跟收到的摘要進行對比,如果對比一樣說明資料並沒有被篡改或者偽裝,這裡還涉及到一個問題,就是A如何確定收到的公鑰是黃的,這個可以利用之前提到的數字證書進行確認,至此,黃和A終於可以進行私密的交流而不用擔心被黑客竊聽了。