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 的關鍵改進
- 更快的交握:Client 在第一個訊息就送出金鑰協商參數,Server 可以直接回覆完成——省下一次往返
- 0-RTT 恢復:之前連線過的用戶可以直接發送加密資料,完全不需要交握
- 移除不安全選項:不再支援老舊的加密演算法,避免降級攻擊
下一章預告
這堂密碼學課你從 AES 加密、RSA 非對稱加密、雜湊函數、HMAC 到 TLS 1.3——涵蓋了現代密碼學的核心工具。