本文主要是本身在學網絡這一塊的一些我的理解,主要是宏觀上的一些解釋,旨在對整個過程有個大概的瞭解。 咱們知道HTTP都是明文傳輸的,因此通訊信息容易被攔截,所以出現了不少手段來保證信息的安全。算法
名詞解釋json
對稱加密
: 加密和解密都是用同一個祕鑰。速度快。瀏覽器
非對稱加密
: 分公鑰和私鑰。公鑰是公開的,私鑰只有本身知道。公鑰加密的只能用私鑰解密,私鑰加密只能用公鑰解密。因此叫非對稱加密。安全
加密和簽名: 借用知乎的一個回答。網絡
加密
: 既然是加密,那確定是不但願別人知道個人消息,因此只有我才能解密,所以是公鑰加密,私鑰解密。post
簽名
: 既然是簽名,那確定不但願別人冒充我,因此只有我才能簽名,所以是私鑰加密,公鑰解密。優化
加密方法:ui
針對加密速度: 使用非對稱傳輸對稱加密的祕鑰,而後用對稱加密來通訊。加密
主要流程以下:spa
1. 獲取雙方的公鑰
2. 使用公鑰傳輸私鑰
3. 使用私鑰進行對稱加密,進行通訊
複製代碼
針對公鑰被攔截:引入CA和數字證書。
CA至關於現實中的公證處,簡單理解就是CA頒發給服務端一個數字證書,而瀏覽器能夠鑑別這個證書是否是真的。能夠從數字證書中得到服務端的公鑰。
首先服務端經過CA生成數字證書(含數字簽名):
服務端將數字證書傳遞給客戶端,客戶端驗證消息是否被篡改的過程:
經過上述過程,便安全獲取了服務端的公鑰。完成了步驟1. 整個過程以下:
TLS握手:
使用RSA加密方式:
但X,Y,Z均爲明文傳輸,X,Y,Z被hacker拿到後,他也能夠生成一樣對稱加密的祕鑰key。
目前主流的是ECDHE加密方式:
以前的疑惑是既然X,Y,A,B
均爲明文傳輸,hacker攔截後也同樣能夠經過算法生成key啊,不就不安全了嗎?
這就要講到DH算法了,DH
,DHE
,ECDHE
算法能夠理解爲不斷的優化,本質上仍是同樣的。爲何這個過程是安全的,關鍵就在於A,B。
DH算法是服務端根據參數a
, 生成A = F(a)
. 客戶端根據參數b
,生成B = F(b)
。並且即便hacker知道A
,也知道算法F()
,可是沒法推算出a
的值,同理b
的值也沒法獲取。
該算法存在如下關係, 生成Z:
Z = A * b = B * a 。
明文傳遞有X
, Y
, A
, B
.
由於hacker沒法獲取a
,b
的值,因此生成的Z
是安全的,所以經過X,Y,Z
生成的對稱祕鑰也是安全的。
附上詳細的RSA過程:
詳細的ECDHE
參考文章