問題: 在http 中,內容是明文傳輸的,能夠很容易的被截取和篡改,以下圖算法
解決: 爲了解決http的明文傳輸的問題,這個時候咱們能夠引入對稱加密算法,客戶端和服務端都維護同一個密匙,用於加密和解密,以下圖瀏覽器
這個時候的確解決了數據被截取和篡改的問題。 可是,考慮一個場景,當有多個客戶端的時候,狀況會如何?服務器
如上圖,若是不作任何修改,只是添加客戶端的話,那每一個客戶端都可以取得密匙, 那密匙也就再也不是密匙了,而是任何人都能輕易獲得的了。數據截取又會發生了。ide
如何解決?能夠考慮給每一個client 不一樣的key網站
這個時候狀況就會路下圖加密
這種方式有什麼問題嗎? 很容易發現key是被明文傳輸的,能夠暴露在互聯網中的,那能怎麼辦呢? 對key進行加密?可是若是對key 進行加密,又要引入新的密匙,而新的密匙又要進行傳輸,依然會存在被截取的問題。怎麼解決呢? 這個時候就要須要引入非對稱加密了3d
那麼天然而然就會有一個問題須要解決,客戶端如何獲取公鑰呢?視頻
總的來講有兩種種可能:blog
很明顯,2 是不可能的。那隻能是1. 以下圖所示教程
可是服務器把公鑰發送給客戶端的時候,公鑰就有可能會被掉包,這樣的話,數據的截取和篡改又會發生了。
怎麼辦?
這時候就是現有https的解決方案了就要出場了
這時咱們須要引入CA 證書的概念, 不清楚的同窗能夠本身去 Google 下
第一步: 須要網站到第三方機構申請CA 證書
第二部: 瀏覽器和服務器能夠根據申請獲得的CA 證書使用 Https 協議
Https 運行時序圖:
在網上找到一個更好的 Https 加解密的流程圖:
若是仍是不能理解,推薦閱讀如下視頻教程
youtube: 12 Public Key Infrastructure
Bilibili: 12 public key infrastructure
參考: