5. HTTPS 最佳化:安全與效能的平衡
5.1 CDN 上 HTTPS 很重要的動機
場景對比:
無 HTTPS:
使用者存取 http://cdn.example.com/image.jpg
↓
瀏覽器網址列顯示「不安全」
↓
某些瀏覽器/APP 直接攔截存取
↓
SEO 排名降低有 HTTPS:
使用者存取 https://cdn.example.com/image.jpg
↓
瀏覽器顯示綠色鎖頭標誌
↓
HTTP/2 多工生效
↓
效能 + 安全雙提升5.2 CDN HTTPS 設定要點
憑證管理
| 方案 | 說明 | 成本 | 適用場景 |
|---|---|---|---|
| 雲端廠商免費憑證 | 阿里雲/騰訊雲等提供 | 免費 | 單網域,快速上手 |
| Let's Encrypt | 社群免費憑證 | 免費 | 自動化部署 |
| 商業 DV/OV/EV 憑證 | Symantec、GeoTrust 等 | ¥幾百-幾萬/年 | 企業級、需要綠條 |
| 泛網域憑證 | *.example.com | ¥幾千/年 | 多子網域 |
實戰建議:
- 測試環境:Let's Encrypt 或雲端廠商免費憑證
- 正式環境:泛網域憑證(省事)或單網域 OV 憑證(省錢)
- 注意憑證過期時間,設定自動續期提醒
HTTPS 最佳化設定
TLS 版本選擇:
推薦設定:僅 TLS 1.2 和 TLS 1.3
相容設定:TLS 1.1 + TLS 1.2 + TLS 1.3(相容老舊瀏覽器)密碼套件:
推薦:ECDHE 金鑰交換 + AES-GCM 加密
停用:DES、RC4、MD5、SHA1OCSP Stapling:
功能:CDN 節點預先獲取憑證撤銷狀態
效果:減少用戶端驗證時間 200-500ms
建議:務必開啟TLS 工作階段重用:
Session ID 重用:用戶端帶著上次 Session ID,伺服器端恢復工作階段
Session Ticket 重用:伺服器端把工作階段狀態加密發給用戶端,下次帶來
效果:避免完整 TLS 交握,減少 1-RTT5.3 HTTP/2 與 HTTP/3 在 CDN 上的應用
HTTP/2 多工:
HTTP/1.1:
請求 1 (index.html) ────────────────→
回應 1 ←──────────────────────────────
請求 2 (style.css) ─────────────────→
回應 2 ←──────────────────────────────
請求 3 (script.js) ─────────────────→
回應 3 ←──────────────────────────────
(序列,一個完了下一個)
HTTP/2:
請求 1 ──→
請求 2 ──→ 合併在一個 TCP 連線上,幀交錯傳輸
請求 3 ──→
回應 1 ←── 按優先級串流式回傳
回應 2 ←──
回應 3 ←──
(並行,一個連線多工)HTTP/2 伺服器端推送:
場景:使用者請求 index.html,裡面引用了 style.css 和 script.js
傳統方式:
1. 使用者下載 index.html
2. 解析發現需要 style.css 和 script.js
3. 再發兩個請求獲取
HTTP/2 推送:
1. 使用者請求 index.html
2. CDN 節點回傳 index.html 的同時,主動推送 style.css 和 script.js
3. 使用者解析 html 時,資源已經在快取裡了
注意:推送要謹慎,推多了浪費頻寬,推少了沒效果HTTP/3 (QUIC):
HTTP/2 的問題:基於 TCP,隊頭阻塞
→ 一個 TCP 封包丟失,整個連線等待重傳
HTTP/3 的解決:基於 QUIC(UDP 之上實現可靠傳輸)
→ 每個串流獨立,一個串流阻塞不影響其他串流
→ 連線遷移:WiFi 切 4G,連線不中斷
→ 0-RTT 交握:第一次存取也能快速建立連線
現狀:2024 年主流 CDN 已支援 HTTP/3,建議開啟