HTTPS(HyperText Transfer Protocol Secure)通過多種技術手段實現數據傳輸的安全性,其核心機制基于SSL/TLS協議,并結合數字證書、加密算法等技術。
SSL:Secure Sockets Layer,安全套接字層
TLS:Transport Layer Security,傳輸層安全性協議
一、證書驗證機制
1. 數字證書與CA(Certificate Authority,證書授權)認證
- 服務器需通過受信任的證書頒發機構(CA)申請數字證書,證書包含
服務器公鑰、域名信息及CA的數字簽名
。客戶端驗證證書的合法性(如有效期、域名匹配、CA鏈完整性),確保通信對象身份可信。 - 擴展驗證(EV)證書:提供更高級別的身份驗證,如企業營業執照信息,增強用戶信任感。
2. 證書鏈驗證
- 客戶端通過驗證證書的完整信任鏈(從根證書到中間證書再到服務器證書),防止中間人攻擊中偽造的證書被接受。
二、加密算法組合
1. 非對稱加密(密鑰交換)
- 握手階段使用RSA、ECDHE等非對稱算法加密對稱密鑰(如AES密鑰),解決密鑰傳輸的安全問題。
- 前向保密(Perfect Forward Secrecy):通過臨時密鑰(如DHE/ECDHE)生成會話密鑰,即使長期私鑰泄露,歷史會話數據仍無法被解密。
2. 對稱加密(數據傳輸)
- 會話建立后,使用AES、ChaCha20等對稱算法加密數據,兼顧加密效率與安全性。
ChaCha20-Poly1305是Google所采用的一種新式加密算法,性能強大,在CPU為精簡指令集的ARM平臺上尤為顯著。
三、SSL/TLS握手過程的安全設計
1. 握手協議(Handshake Protocol)
- 客戶端與服務器協商加密算法、交換公鑰、生成會話密鑰,確保雙方使用相同的加密策略。
- 證書指紋校驗:部分場景中,客戶端可預存服務器證書指紋,防止中間人替換證書。
2. 防篡改與完整性校驗
- 使用MAC(Message authentication code,消息認證碼)或HMAC算法驗證數據完整性,確保傳輸內容未被篡改。
- TLS 1.3引入AEAD(認證加密與數據填充)模式,將加密與完整性校驗合并,提升效率。
四、協議版本與配置優化
1. TLS協議版本控制
- 優先使用TLS 1.2或TLS 1.3(支持更安全的加密套件和前向保密),禁用SSLv2/v3及弱加密算法(如RC4、MD5)。
- TLS 1.3簡化握手流程,減少握手次數,降低中間人攻擊風險。
2. 安全配置優化
- HSTS(HTTP Strict Transport Security):強制瀏覽器僅通過HTTPS訪問,防止降級攻擊(如HTTP重定向)。
- OCSP Stapling:服務器主動緩存OCSP響應,減少證書吊銷狀態查詢的延遲與隱私泄露風險。
- OCSP(Online Certificate Status Protocol,在線證書狀態協議)是維護服務器和其它網絡資源安全性的兩種普遍模式之一。另一種更老的方法是證書注銷列表(CRL)已經被在線證書狀態協議取代了很多年了。
- OCSP克服了證書注銷列表(CRL)的主要缺陷:必須經常在客戶端下載以確保列表的更新。當用戶試圖訪問一個服務器時,在線證書狀態協議發送一個對于證書狀態信息的請求。服務器回復一個“有效”、“過期”或“未知”的響應。協議規定了服務器和客戶端應用程序的通訊語法。在線證書狀態協議給了用戶的到期的證書一個寬限期,這樣他們就可以在更新以前的一段時間內繼續訪問服務器。
五、防中間人攻擊(MITM)措施
1. 證書綁定技術
- 使用DNSSEC或DANE(DNS-Based Authentication of Named Entities)綁定域名與證書,防止DNS劫持導致的證書偽造。
- 證書透明度(Certificate Transparency):公開所有證書頒發記錄,便于檢測惡意證書。
2. 多因素認證(MFA)
- 在敏感場景中,結合短信、生物識別等多因素驗證,增強用戶身份認證的安全性。
六、性能與安全平衡
- HTTP/2與TLS 1.3結合:減少握手延遲,支持多路復用和頭部壓縮,提升加密傳輸效率。
- 硬件加速:使用SSL卸載卡或支持AES-NI指令集的CPU,優化加密運算性能。
七、瀏覽器與服務器建立 HTTPS 連接的流程
參與對象:+----------------+ +----------------+| 瀏覽器 | | 服務器 |+----------------+ +----------------+| || TCP三次握手 | |-----------------------> || | SYN-ACK|<----------------------- || ACK ||------------------------>|| || Client Hello | |------------------------>|| (協議版本、加密套件、Client Random)| | Server Hello|<------------------------|| (協議版本、加密套件、Server Random、證書)| 證書驗證 | |------------------------>|| (驗證CA鏈、域名、有效期)| | 證書驗證通過|<------------------------|| Client Key Exchange ||------------------------>|| (Pre-Master Secret 加密)| | 生成主密鑰|<------------------------|| Change Cipher Spec ||------------------------>|| Change Cipher Spec | |<------------------------|| Finished ||------------------------>|| Finished | |<------------------------|| 加密數據傳輸 || |
關鍵步驟說明
- TCP 三次握手
- 瀏覽器發送
SYN
,服務器回復SYN-ACK
,瀏覽器確認ACK
,建立 TCP 連接(端口 443)。
- 瀏覽器發送
- Client Hello
- 瀏覽器發起 TLS 握手,協商支持的協議版本(如 TLS 1.2)、加密套件(如 AES256-GCM-SHA384)及隨機數
Client Random
。
- 瀏覽器發起 TLS 握手,協商支持的協議版本(如 TLS 1.2)、加密套件(如 AES256-GCM-SHA384)及隨機數
- Server Hello
- 服務器響應選定的協議和加密套件,發送隨機數
Server Random
和數字證書(含公鑰、域名信息、CA 簽名)。
- 服務器響應選定的協議和加密套件,發送隨機數
- 證書驗證
- 瀏覽器驗證證書合法性:
- 檢查 CA 鏈是否可信。
- 確認證書域名與服務器匹配。
- 驗證證書未過期且未被吊銷(可能通過 OCSP 或 CRL)。
- 瀏覽器驗證證書合法性:
- 密鑰交換
- 瀏覽器生成
Pre-Master Secret
,用服務器公鑰加密后發送。 - 服務器解密獲取
Pre-Master Secret
。
- 瀏覽器生成
- 主密鑰生成
- 雙方通過
Client Random
、Server Random
、Pre-Master Secret
生成相同的主密鑰(Master Secret),派生會話密鑰。
- 雙方通過
- 加密通信啟動
- 雙方發送
Change Cipher Spec
消息,切換為會話密鑰加密。 - 發送
Finished
消息(含握手摘要),驗證密鑰一致性。
- 雙方發送
- 數據傳輸
- 使用對稱加密(如 AES)傳輸 HTTP 請求/響應,確保數據機密性與完整性。
補充說明
- TLS 1.3 簡化版:若使用 TLS 1.3,握手步驟更少(1-RTT 或 0-RTT),且移除弱加密算法(如 RSA 密鑰交換)。
0-RTT(Zero Round Trip Time)是一種網絡協議優化技術,旨在消除或減少建立安全連接所需的往返延遲,尤其在 TLS 1.3 和 QUIC (Quick UDP Internet Connections, 快速UDP網絡連接)協議中廣泛應用。
- 證書吊銷檢查:部分場景中,瀏覽器會向 OCSP 服務器查詢證書狀態。
- 前向保密(PFS):若使用 ECDHE 算法,每次會話生成臨時密鑰,增強安全性。
總結
HTTPS的安全性依賴于證書驗證、加密算法組合、協議設計及配置優化的協同作用。實際部署中需定期更新證書、禁用弱加密算法,并結合HSTS、OCSP Stapling等技術增強防護。同時,需關注協議演進(如TLS 1.3)和新型攻擊手段(如量子計算威脅),持續優化安全策略。