一、TLS(Transport Layer Security)握手是建立安全通信通道的關鍵過程,確保客戶端與服務器之間的通信加密和身份驗證。以下是TLS 1.2和TLS 1.3的握手流程詳解及對比:
TLS 1.2 握手流程
目標:協商加密套件、交換密鑰、驗證身份??
步驟: ?
1. Client Hello?
- 客戶端發送支持的TLS版本、加密套件列表(如`AES256-GCM-SHA384`)、隨機數(Client Random)及擴展字段(如SNI)。
2. Server Hello??
- 服務器選擇TLS版本、加密套件,并返回隨機數(Server Random)和服務端證書(包含公鑰)。
3. 證書驗證
- 客戶端驗證服務器證書鏈(是否可信、是否過期、域名匹配等)。若啟用雙向認證,服務器會請求客戶端證書。
4. Server Key Exchange?
- 若使用DH/ECDHE密鑰交換,服務器發送臨時公鑰參數(如ECDHE公鑰)和簽名。
5. Server Hello Done??
- 服務器通知客戶端初始協商完成。
6. Client Key Exchange??
- 客戶端生成預主密鑰(Pre-Master Secret),用服務器公鑰加密(RSA)或發送臨時公鑰(DH/ECDHE)。
7. 密鑰派生?
- 雙方通過Client Random、Server Random和Pre-Master Secret生成會話密鑰(Master Secret),再派生出加密密鑰和MAC密鑰。
8. 切換加密通信??
- 雙方發送`Change Cipher Spec`通知,后續通信使用協商的密鑰加密。
9. Finished?
- 雙方發送加密的`Finished`消息,驗證握手完整性。
TLS 1.3 握手流程
?優化目標:減少延遲(1-RTT或0-RTT)、移除不安全特性。 ?
關鍵改進: ?
- 刪除RSA密鑰交換、靜態DH,僅支持前向安全的ECDHE。 ?
- 合并多步驟為單條消息,支持1-RTT握手。 ?
步驟: ?
1. Client Hello?
- 發送支持的加密套件、Client Random、密鑰共享參數(如ECDHE公鑰)。
2. Server Hello??
- 服務器選擇參數,返回Server Random、密鑰共享參數(ECDHE公鑰),并附帶證書和簽名。 ?
- 直接生成會話密鑰:雙方通過ECDHE參數即時計算共享密鑰。
3. 加密通信??
- 服務器立即發送`Finished`消息,客戶端驗證后即可開始加密通信(1-RTT)。 ?
- **0-RTT(可選)**:若之前連接過,客戶端可在首次請求中攜帶加密數據(有重放攻擊風險)。
二、DNS(Domain Name System)解析是將域名轉換為IP地址的過程,以下是詳細的解析流程:
---
1. 用戶輸入域名
用戶在瀏覽器中輸入域名,觸發DNS解析請求。
---
2. 本地緩存查詢
- 瀏覽器緩存:瀏覽器首先檢查自身緩存中是否有該域名的解析結果。
- 系統緩存(Hosts文件):如果瀏覽器無緩存,操作系統會檢查本地Hosts文件是否有對應的IP記錄。
- 系統DNS緩存:操作系統查詢本地DNS緩存。
> 若緩存命中且未過期:直接返回IP,解析結束。
---
3. 向遞歸DNS服務器發起請求
如果本地無緩存,系統會向遞歸DNS服務器(通常由ISP或公共DNS如`8.8.8.8`、`114.114.114.114`提供)發送查詢請求。
- 遞歸DNS服務器緩存:遞歸服務器先檢查自身緩存,若有記錄則直接返回。
- 無緩存時:遞歸服務器開始迭代查詢。
---
4. 迭代查詢(根域名→頂級域→權威DNS)
遞歸服務器按層級依次查詢以下DNS服務器:
(1) 根域名服務器(Root DNS)
- 全球共13組根服務器(邏輯上,實際通過任播擴展)。
- 返回`.com`頂級域(TLD)的DNS服務器地址(如`a.gtld-servers.net`)。
(2) 頂級域名服務器(TLD DNS)
- 管理`.com`、`.org`等頂級域的服務器。
- 返回`example.com`的**權威DNS服務器**地址(如`ns1.example.com`)。
(3) 權威域名服務器(Authoritative DNS)
- 由域名注冊商或托管服務商(如Cloudflare、阿里云)提供。
- 返回`www.example.com`的IP地址(如`192.0.2.1`)。
---
5. 返回解析結果
- 遞歸DNS服務器將IP返回給用戶,并緩存該記錄(根據TTL值)。
- 操作系統和瀏覽器也緩存結果,加速后續訪問。
---
6. 建立連接
用戶獲取IP后,通過TCP/IP協議(如HTTP/HTTPS)與目標服務器建立連接。