TLS 1.3 與安全通訊

🔥 Vibe Prompt

「用 Python 建立 TLS 1.3 伺服器與客戶端。比較 TLS 1.2 與 1.3 的握手往返次數。」

import ssl, socket, threading, time

# 伺服器
context_srv = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context_srv.load_cert_chain(certfile="server.crt", keyfile="server.key")
context_srv.minimum_version = ssl.TLSVersion.TLSv1_3

def server():
    with socket.socket() as sock:
        sock.bind(('localhost', 8443))
        sock.listen(1)
        with context_srv.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            print(f"伺服器:收到來自 {addr} 的連線")
            print(f"伺服器:加密套件={conn.cipher()}, 版本={conn.version()}")
            data = conn.recv(1024)
            conn.send(b"Hello from TLS 1.3 server!")

# 客戶端
context_cli = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context_cli.load_verify_locations(cafile="root-ca.crt")

def client():
    time.sleep(0.1)
    with socket.create_connection(('localhost', 8443)) as sock:
        with context_cli.wrap_socket(sock, server_hostname="api.vibetutor.com") as ssock:
            print(f"客戶端:加密套件={ssock.cipher()}, 版本={ssock.version()}")
            ssock.send(b"Hello!")
            print(f"客戶端收到:{ssock.recv(1024)}")

threading.Thread(target=server).start()
threading.Thread(target=client).start()
time.sleep(0.5)

TLS 1.3 改進

| 功能 | TLS 1.2 | TLS 1.3 | |------|---------|---------| | 握手 | 2 RTT | 1 RTT(0-RTT 恢復) | | 加密套件 | 多種(部分弱) | 僅 AEAD(GCM/ChaCha) | | Session Tickets | 必要 | 恢復用 PSK |

密碼學課程完成!🎉

  • ✅ AES 加密
  • ✅ RSA 非對稱加密
  • ✅ 雜湊與 HMAC
  • ✅ PKI
  • ✅ TLS 1.3

關鍵要點

  • ✅ 請根據本章主題補充具體的學習重點
  • ✅ 建議加入比較表格、程式碼範例或流程圖
  • ✅ 確保內容扎實且有價值

TLS 1.3 的改進

效能提升

| 比較 | TLS 1.2 | TLS 1.3 | |------|:-------:|:-------:| | 完整握手 | 2 次 RTT | 1 次 RTT | | 續連握手 | 1 次 RTT | 0 次 RTT (0-RTT) | | 支援的密碼套件 | 30+ (含不安全) | 5 種(僅安全) | | 協商時間 | ~50-100ms | ~10-30ms |

移除的不安全功能

  • SHA-1 雜湊演算法
  • RC4 串流加密
  • 靜態 RSA 金鑰交換(無向前機密性)
  • 壓縮功能(CRIME 攻擊)
  • 重新協商(中間人攻擊)
  • 自訂 Diffie-Hellman 參數(ROBOT 攻擊)

0-RTT 的風險

0-RTT 允許客戶端在續連時直接發送加密資料(省去握手),但存在 重放攻擊 (Replay Attack) 的風險。攻擊者攔截 0-RTT 資料後可以重複發送。

解決方案:不要在 0-RTT 中執行有副作用的操作(如建立訂單、轉帳)。只在 0-RTT 中執行查詢等冣等操作。

Nginx 設定

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;

    # HSTS (HTTP Strict Transport Security)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}


TLS 1.3:更快、更安全的 HTTPS

TLS(Transport Layer Security)是網際網路上最廣泛使用的安全協定。你每次瀏覽 HTTPS 網站,底層都是 TLS 在保護你的資料。

TLS 1.3 vs TLS 1.2

| 比較 | TLS 1.2 | TLS 1.3 | |:----|:-------|:-------| | 交握次數 | 2 次往返(2-RTT) | 1 次往返(1-RTT) | | 恢復連線 | 1-RTT | 0-RTT! | | 支援的密碼套件 | 數十種(很多不安全) | 5 種(全部安全) | | 移除的演算法 | 無 | RC4、DES、CBC mode | | 前向安全性 | 可選 | 強制 |

TLS 1.3 的關鍵改進

  1. 更快的交握:Client 在第一個訊息就送出金鑰協商參數,Server 可以直接回覆完成——省下一次往返
  2. 0-RTT 恢復:之前連線過的用戶可以直接發送加密資料,完全不需要交握
  3. 移除不安全選項:不再支援老舊的加密演算法,避免降級攻擊

下一章預告

這堂密碼學課你從 AES 加密、RSA 非對稱加密、雜湊函數、HMAC 到 TLS 1.3——涵蓋了現代密碼學的核心工具。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!