在過去的幾年裡,業界巨頭Google利用旗下Chrome瀏覽器大力推行HTTPS,沒有使用SSL/TLS進行加密的網站一律被標記為不安全。作為一個開發人員,連HTTPS原理都不懂的話是註定要被鄙視的。咱還是不廢話,直奔主題吧。
先來一張圖描述HTTPS的交互過程:
![一分鐘弄懂HTTPS過程,從此不再懵懵懂懂!](http://p2.ttnews.xyz/loading.gif)
非常的簡單明瞭,看完之後想一想整個過程需要用到哪些加密算法。
上圖需要用到的算法有:非對稱加密、對稱加密、單向散列。
簡化步驟如下:
1.客戶端發起請求;
2.服務端返回證書;
3.客戶端從驗證證書得到服務端的公鑰;
4.客戶端生成隨機數,並用公鑰加密後發送給服務端;
5.服務器根據隨機數生成對稱密鑰;
6.用對稱密鑰加密數據傳輸;
什麼是證書
![一分鐘弄懂HTTPS過程,從此不再懵懵懂懂!](http://p2.ttnews.xyz/loading.gif)
這裡的證書其實就是使用權威機構的私鑰加密過的服務器公鑰,所以製作證書通常是要付費的。那麼問題來了,能不能自己製作一個證書?
為什麼不能直接下發服務器公鑰給客戶端
細想一下,如果直接下發公鑰給中間人攔截獲取了,那麼之後的通信過程就無安全可言了。
如何驗證證書的可靠性?
答案就是使用數字簽名,上圖的編號就是用來驗證證書的有效性的,權威機構頒發給不同網站的證書都只能是唯一的。
瀏覽器通常是怎麼解密出服務器的公鑰的?
我們都知道,在非對稱加密中,用私鑰加密的數據只有公鑰才能解密,那麼客戶端一開始的公鑰是怎麼獲得的?其實任何的操作系統比如Windows 10和Mac本身就已經帶有受信任機構的根證書。(ps:盜版系統的危害不言而喻...)
為何HTTPS建立之後使用對稱算法加密?
因為只要保證密鑰不會洩漏出去,那麼數據就是安全的,而且非對稱加密算法相當耗費資源,不可能也沒必要每次傳輸都使用。
只要理解了以上幾個問題,那麼整個過程就非常清晰了。
閱讀更多 架構之美 的文章