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