目錄
- 1. 簡介
- 2. TLS 握手過程
- 3. 常見的加密算法
- 3.1 對稱加密算法
- 3.2 非對稱加密算法
1. 簡介
HTTPS在HTTP的基礎上引入了一個TLS層,采用密文進行傳輸,結合對稱加密技術和非對稱加密技術來實現數據的安全性和完整性。
客戶端會生成隨機密鑰,并使用服務端的公鑰加密后再傳給服務端。根據非對稱加密算法,公鑰加密的消息僅能通過私鑰解密,這樣服務端解密后,雙方就得到了相同的密鑰,再用它加密應用消息。(公鑰如何獲取:CA證書里)
- CA證書:保證密鑰發售者身份的真實性
- 非對稱加密技術:保證消息不被冒充
- 對稱密鑰傳送:保證消息不被泄露
- 為什么要采用非對稱加密技術:保證密鑰分發給通信雙方的安全性
2. TLS 握手過程
- 第一次握手:客戶端首先會發一個「Client Hello」消息。消息里面有客戶端使用的 TLS 版本號、支持的密碼套件列表,以及生成的隨機數(Client Random)
- 第二次握手:當服務端收到客戶端的「Client Hello」消息后,會發送 「Server Hello」消息:包含確認 TLS 版本號是否支持,和從密碼套件列表中選擇一個密碼套件,以及生成隨機數(Server Random)。然后,服務端為了證明自己的身份,會發送「Server Certificate」給客戶端,這個消息里含有數字證書。最后,服務端發了「Server Hello Done」消息,目的是告訴客戶端,我已經把該給你的東西都給你了。客戶端拿到證書后, 使用CA 公鑰確認服務器的數字證書的真實性。
- 第三次握手:如果證書沒有問題(通過 CA 的公鑰解密),客戶端會從數字證書中取出服務器的公鑰,生成一個新的隨機數 (pre-master),用服務器的 RSA 公鑰加密該隨機數。向服務器發送如下信息:隨機數、加密算法改變通知、客戶端握手結束通知。
- 第四次握手:服務端收到后,用 RSA 私鑰解密,得到客戶端發來的隨機數。雙方根據已經得到的三個隨機數,生成會話密鑰(Master Secret),它是對稱密鑰,用于對后續的 HTTP 請求/響應的數據加解密。然后,向客戶端發送最后的信息:加密通信算法改變通知、服務器握手結束通知,表示服務器的握手階段已經結束。
3. 常見的加密算法
3.1 對稱加密算法
在對稱加密算法中,加密和解密使用的是同一個密鑰
AES (Advanced Encryption Standard):
AES是目前最廣泛使用的對稱加密標準之一,提供了128、192和256位的密鑰長度,因其高度的安全性和效率,在許多安全協議和系統中被采用。
DES (Data Encryption Standard):
DES是較早的加密標準,使用56位密鑰,因其密鑰長度較短,已被認為不夠安全,容易受到暴力破解攻擊,已逐漸被AES所取代。
非對稱加密算法
3.2 非對稱加密算法
使用一對密鑰,一個公鑰用于加密,一個私鑰用于解密
RSA (Rivest-Shamir-Adleman):
RSA是最早和最著名的非對稱加密算法之一,廣泛用于數據傳輸和數字簽名。RSA的安全性基于大數分解的難題。
ECC (Elliptic Curve Cryptography):
ECC是基于橢圓曲線數學的一種加密技術,相比于RSA,ECC可以在較短的密鑰長度下提供相同或更高的安全性,在移動設備和IoT設備中特別受歡迎。