TLS 1.3 簡介
TLS(Transport Layer Security)是一種加密協定,用於保護網路通訊的安全性。TLS 1.3 於 2018 年 8 月正式發布(RFC 8446),是 TLS 協定的最新版本,相較於前一代 TLS 1.2,在安全性和效能方面都有顯著的提升。
TLS 1.3 的主要設計目標包括:
- 簡化協定:移除不安全或過時的加密演算法
- 提升效能:減少握手所需的往返次數
- 增強安全性:強制使用前向保密(Forward Secrecy)
- 減少攻擊面:移除可能被利用的功能
與 TLS 1.2 的差異
加密套件的變更
TLS 1.3 大幅簡化了支援的加密套件,移除了以下不安全的演算法:
| 移除項目 | 原因 |
|---|
| RSA 金鑰交換 | 不支援前向保密 |
| CBC 模式加密 | 容易受到 Padding Oracle 攻擊 |
| RC4 加密 | 已被證明不安全 |
| SHA-1 雜湊 | 碰撞攻擊風險 |
| 靜態 DH | 不支援前向保密 |
| DES/3DES | 金鑰長度不足 |
TLS 1.3 僅支援以下五種加密套件:
1
2
3
4
5
| TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
TLS_AES_128_CCM_8_SHA256
TLS_AES_128_CCM_SHA256
|
握手效能比較
| 特性 | TLS 1.2 | TLS 1.3 |
|---|
| 完整握手 | 2-RTT | 1-RTT |
| 恢復握手 | 1-RTT | 0-RTT |
| 金鑰交換 | RSA/DHE/ECDHE | 僅 DHE/ECDHE |
握手流程
TLS 1.3 完整握手流程
TLS 1.3 的握手流程大幅簡化,僅需一次往返即可完成:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| 客戶端 伺服器
ClientHello
+ key_share
+ signature_algorithms
+ supported_versions -------->
ServerHello
+ key_share
+ supported_versions
{EncryptedExtensions}
{CertificateRequest*}
{Certificate}
{CertificateVerify}
<-------- {Finished}
{Certificate*}
{CertificateVerify*}
{Finished} -------->
[Application Data] <-------> [Application Data]
|
握手步驟說明
ClientHello:客戶端發送支援的加密參數、金鑰共享(key_share)和支援的 TLS 版本
ServerHello:伺服器選擇加密參數並回傳其金鑰共享
加密擴展:伺服器發送加密的擴展資訊
憑證:伺服器發送其數位憑證
憑證驗證:伺服器簽署握手訊息以證明擁有私鑰
Finished:雙方完成握手驗證
0-RTT 恢復模式
TLS 1.3 引入了 0-RTT(Zero Round Trip Time)模式,允許客戶端在恢復連線時立即發送加密的應用程式資料:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| 客戶端 伺服器
ClientHello
+ early_data
+ key_share
+ psk_key_exchange_modes
+ pre_shared_key
(Application Data*) -------->
ServerHello
+ pre_shared_key
+ key_share
{EncryptedExtensions}
+ early_data
<-------- {Finished}
(EndOfEarlyData)
{Finished} -------->
[Application Data] <-------> [Application Data]
|
注意:0-RTT 模式存在重放攻擊的風險,應謹慎使用,且僅適用於冪等操作。
安全性改進
1. 強制前向保密(Forward Secrecy)
TLS 1.3 強制使用具有前向保密特性的金鑰交換演算法(DHE 或 ECDHE)。這意味著即使伺服器的長期私鑰被洩露,過去的通訊記錄仍然無法被解密。
1
2
3
4
5
| 傳統 RSA 金鑰交換(TLS 1.2):
私鑰洩露 → 所有歷史通訊可被解密
前向保密(TLS 1.3):
私鑰洩露 → 僅當前會話可能受影響,歷史通訊仍安全
|
2. 加密握手訊息
TLS 1.3 在握手過程中更早開始加密,ServerHello 之後的所有訊息都是加密的。這保護了憑證和其他敏感資訊,減少了中間人攻擊的機會。
3. 數位簽章覆蓋整個握手
在 TLS 1.3 中,CertificateVerify 訊息簽署整個握手記錄,防止降級攻擊和握手訊息的篡改。
4. 移除壓縮功能
TLS 1.3 移除了壓縮功能,防止了 CRIME 和 BREACH 等壓縮相關的攻擊。
5. 移除重新協商
TLS 1.3 完全移除了重新協商機制,消除了相關的安全漏洞(如 CVE-2009-3555)。
安全性比較表
| 安全特性 | TLS 1.2 | TLS 1.3 |
|---|
| 前向保密 | 選用 | 強制 |
| 握手加密 | 部分 | 完整 |
| 已知漏洞 | POODLE, BEAST 等 | 目前無重大漏洞 |
| 降級攻擊防護 | 有限 | 完善 |
設定建議
Nginx 設定範例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| server {
listen 443 ssl http2;
server_name example.com;
# 憑證設定
ssl_certificate /etc/nginx/ssl/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
# TLS 版本設定 - 僅允許 TLS 1.2 和 1.3
ssl_protocols TLSv1.2 TLSv1.3;
# TLS 1.3 加密套件
ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;
# TLS 1.2 加密套件(向後相容)
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
# 優先使用伺服器端加密套件
ssl_prefer_server_ciphers on;
# Session 設定
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;
}
|
Apache 設定範例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <VirtualHost *:443>
ServerName example.com
# 憑證設定
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/private.key
# TLS 版本設定
SSLProtocol -all +TLSv1.2 +TLSv1.3
# 加密套件設定
SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
# 優先使用伺服器端加密套件
SSLHonorCipherOrder on
# HSTS
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>
|
最佳實踐建議
優先使用 TLS 1.3:在所有支援的環境中啟用 TLS 1.3
停用舊版協定:停用 TLS 1.0 和 TLS 1.1
謹慎使用 0-RTT:
定期更新:
- 保持 OpenSSL/BoringSSL 等函式庫更新
- 關注安全公告
憑證管理:
- 使用 ECDSA P-256 或 RSA 2048+ 憑證
- 啟用 OCSP Stapling
- 設定適當的憑證更新週期
監控與測試:
- 使用 SSL Labs 等工具定期測試
- 監控 TLS 握手失敗率
- 記錄使用的 TLS 版本分布
結論
TLS 1.3 代表了網路安全協定的重大進步,透過簡化設計、移除不安全的功能,以及強制使用現代加密技術,為網路通訊提供了更強的安全保障。建議所有系統管理員和開發者儘快將系統升級至支援 TLS 1.3,並遵循本文提供的設定建議,以確保最佳的安全性。
參考資料