深入淺出 TLS 協定:保護網路通訊的安全鎖
在 HTTP 請求的旅程中,TLS (Transport Layer Security) 扮演著「保險箱」的角色。它確保了資料在傳輸過程中不會被偷看 (加密)、不會被竄改 (完整性),且對方真的是他所宣稱的身分 (身分驗證)。
一、 從 SSL 到 TLS:安全演進史
很多人習慣將 HTTPS 的加密稱為「SSL」,但實際上我們現在使用的是它的繼承者 TLS。
| 協定名稱 | 完整名稱 | 狀態 |
|---|---|---|
| SSL 2.0/3.0 | Secure Sockets Layer | 已廢棄 (不安全) |
| TLS 1.0/1.1 | Transport Layer Security | 已廢棄 |
| TLS 1.2 | Transport Layer Security 1.2 | 目前主流 |
| TLS 1.3 | Transport Layer Security 1.3 | 當前最推薦 (更安全、更快速) |
二、 TLS 提供三大核心保障
- 機密性 (Confidentiality):利用非對稱加密交換金鑰,再利用對稱加密傳輸資料,確保內容只有雙方看得懂。
- 完整性 (Integrity):通過 MAC (Message Authentication Code) 或數位簽章,確保資料在搬運過程中沒被動過。
- 身分驗證 (Authentication):通過數位憑證 (Digital Certificate),確認你連上的真的是 google.com 而不是駭客。
三、 TLS 1.2 握手流程 (2 RTT)
在 TCP 連線建立後,TLS 1.2 需要經過多個步驟來協商加密方式並交換金鑰:
四、 TLS 1.3 的革命:1 RTT 與 0 RTT
TLS 1.3 大幅精簡了過程,將金鑰交換合併到了 Hello 階段。
- 1 RTT 握手:資料交換前只需要一次往返,比 TLS 1.2 快上一倍。
- 0 RTT (Resumption):如果你之前連過這台伺服器,這次甚至可以在握手封包裡就直接帶上加密資料。
> **HTTPS = HTTP over TLS**。並非是一個新的協定,而是 HTTP 的資料先經過 TLS 加密後,再丟給 TCP 去傳輸。
總結
| 版本 | 握手時間 | 安全性 | 特色 |
|---|---|---|---|
| TLS 1.2 | 2 RTT | 高 | 支援度最廣,但握手較慢 |
| TLS 1.3 | 1 RTT | 極高 | 移除了不安全算法,速度大幅提升 |
進階挑戰
- 使用瀏覽器開發者工具的 Security 面板,查看當前網頁使用的是 TLS 哪一個版本以及哪種加密套件 (Cipher Suite)。
- 思考為什麼我們不全程使用「非對稱加密」來傳輸資料就好?為什麼中間要換成對稱加密?