https 原理,從頭分析

問題: 在http 中,內容是明文傳輸的,能夠很容易的被截取和篡改,以下圖算法

https-1

解決: 爲了解決http的明文傳輸的問題,這個時候咱們能夠引入對稱加密算法,客戶端和服務端都維護同一個密匙,用於加密和解密,以下圖瀏覽器

https-2

這個時候的確解決了數據被截取和篡改的問題。 可是,考慮一個場景,當有多個客戶端的時候,狀況會如何?服務器

https-3

如上圖,若是不作任何修改,只是添加客戶端的話,那每一個客戶端都可以取得密匙, 那密匙也就再也不是密匙了,而是任何人都能輕易獲得的了。數據截取又會發生了。ide

如何解決?能夠考慮給每一個client 不一樣的key網站

這個時候狀況就會路下圖加密

https-4

這種方式有什麼問題嗎? 很容易發現key是被明文傳輸的,能夠暴露在互聯網中的,那能怎麼辦呢? 對key進行加密?可是若是對key 進行加密,又要引入新的密匙,而新的密匙又要進行傳輸,依然會存在被截取的問題。怎麼解決呢? 這個時候就要須要引入非對稱加密3d

那麼天然而然就會有一個問題須要解決,客戶端如何獲取公鑰呢?視頻

總的來講有兩種種可能:blog

  1. 服務器端把公鑰發送給每個客戶端
  2. 讓瀏覽器保存全部的公鑰

很明顯,2 是不可能的。那隻能是1. 以下圖所示教程

https-5

可是服務器把公鑰發送給客戶端的時候,公鑰就有可能會被掉包,這樣的話,數據的截取和篡改又會發生了。

怎麼辦?

這時候就是現有https的解決方案了就要出場了

這時咱們須要引入CA 證書的概念, 不清楚的同窗能夠本身去 Google 下

第一步: 須要網站到第三方機構申請CA 證書

第二部: 瀏覽器和服務器能夠根據申請獲得的CA 證書使用 Https 協議

Https 運行時序圖:

https-7

在網上找到一個更好的 Https 加解密的流程圖:

https-6-How-HTTPS-Works

若是仍是不能理解,推薦閱讀如下視頻教程

youtube: 12 Public Key Infrastructure

Bilibili: 12 public key infrastructure

參考:

How Does HTTPS Work? RSA Encryption Explained

相關文章
相關標籤/搜索