所有 SSL 文章 SSL 與憑證

2026 年 SSL/TLS 最佳實踐

SSL/TLS 配置已發生重大變化。這是截至 2026 年的最佳實踐現狀——該啟用什麼、該禁用什麼,以及即將到來的變化。

協議版本

協議狀態操作
SSL 2.0, 3.0已破解禁用 —— 存在嚴重漏洞(POODLE、DROWN)
TLS 1.0已棄用(2021)禁用 —— BEAST 漏洞
TLS 1.1已棄用(2021)禁用 —— 不支援現代密碼套件
TLS 1.2安全啟用 —— 僅使用 AEAD 密碼套件
TLS 1.3當前標準啟用 —— 最快、最安全

Nginx: ssl_protocols TLSv1.2 TLSv1.3; Apache: SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

密碼套件

TLS 1.3(無需配置)

全部 5 個密碼套件都是安全的。不要試圖自定義——你無法讓它更好。

TLS 1.2(限制為僅 AEAD)

# Nginx
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;

規則:

  • ECDHE-* 套件 —— 確保前向保密
  • *-GCM-**-CHACHA20-* —— 僅 AEAD 密碼
  • 無 CBC 密碼 —— 易受 BEAST、Lucky13 攻擊
  • ssl_prefer_server_ciphers off —— 讓用戶端選擇(現代用戶端會選最佳選項)

證書管理

實踐原因
使用 ECDSA P-256 金鑰比 RSA 2048 更小、更快
自動續簽2029 年 47 天有效期使手動續簽不可行
提供 fullchain.pem防止信任鏈錯誤
監控證書過期在第 60 天設定告警(90 天有效期)
使用證書透明度監控捕獲未授權證書
續簽時輪換金鑰不要在證書間複用私鑰

安全頭

# HSTS — always use HTTPS (start with short max-age, increase later)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;

# Prevent MIME-type sniffing
add_header X-Content-Type-Options "nosniff" always;

# Prevent clickjacking
add_header X-Frame-Options "SAMEORIGIN" always;

# Upgrade insecure sub-resources
add_header Content-Security-Policy "upgrade-insecure-requests" always;

HSTS 深入解析 →

效能最佳化

設定配置收益
HTTP/2listen 443 ssl http2;多路複用、頭部壓縮
會話快取ssl_session_cache shared:SSL:10m;避免回訪者重新握手
關閉會話票證ssl_session_tickets off;更好的前向保密
OCSP Staplingssl_stapling on;更快的證書驗證、更好的隱私
早期資料(0-RTT)TLS 1.3 預設零延遲恢復(謹慎使用)

完整 Nginx 配置(生產就緒)

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate     /etc/ssl/fullchain.pem;
    ssl_certificate_key /etc/ssl/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers off;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;

    root /var/www/html;
}

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

測試:SSL Labs 輸入你的域名——此配置應得到 A+ 評分。

不要做什麼

錯誤實踐原因正確做法
ssl_protocols TLSv1 TLSv1.1;已棄用、有漏洞僅 TLS 1.2 + 1.3
ssl_ciphers ALL;包含弱密碼明確的 ECDHE + AEAD 列表
ssl_prefer_server_ciphers on;(TLS 1.3)不必要——TLS 1.3 密碼都安全off
使用 cert.pem 而非 fullchain.pem缺少鏈 → 信任錯誤Nginx 始終用 fullchain.pem
生產環境用自簽名證書瀏覽器警告、無信任Let’s Encrypt(免費)
多年使用同一私鑰限制損害控制每次續簽輪換
不用 HSTS易受降級攻擊測試後啟用
HSTS 的 max-age=0實際上禁用了 HSTS從 300 開始,增加到 63072000

常見問題

如何測試我的 SSL 配置?

SSL Labs Server Test —— 輸入域名,獲得 A-F 評級的詳細報告。檢查協議支援、密碼強度、鏈有效性和已知漏洞。

應該追求什麼評級?

生產站點追求 A+。要求:僅 TLS 1.2+、AEAD 密碼、有效鏈、長 max-age 的 HSTS。上述配置可達到 A+。

應該多久審查一次 SSL 配置?

每年一次,或在新漏洞公佈時。訂閱 Let’s Encrypt 狀態頁並關注 Mozilla SSL Configuration Generator 獲取更新建議。

有工具能為我生成正確配置嗎?

有 —— Mozilla SSL Configuration Generator。選擇你的伺服器(Nginx、Apache 等)和版本,它會生成推薦配置。“Modern”配置檔案與本文的實踐相匹配。

相關文章

SSL 與憑證 2026-05-08
什麼是 TLS 1.3?所有變化詳解
TLS 1.3 是當前的加密標準——更快的握手、強制前向保密、無遺留演算法。瞭解與 TLS 1.2 的區別、如何啟用,以及是否應該強制使用。
SSL 與憑證 2026-05-08
什麼是前向保密(完美前向保密)?
前向保密意味著每個 TLS 連線使用唯一的金鑰。即使伺服器的私鑰洩露,過去的通訊也無法被解密。瞭解其工作原理以及如何確保已啟用。
SSL 與憑證 2026-05-08
HSTS:HTTP 嚴格傳輸安全詳解
HSTS 告訴瀏覽器始終使用 HTTPS。瞭解如何配置 HSTS、max-age 該設多大、何時新增 preload,以及配置錯誤的風險。
部署 2026-05-08
如何在 Nginx 上安裝 SSL 證書
在 Nginx 上安裝 SSL 證書的分步指南。涵蓋檔案上傳、完整 server 塊配置、TLS 最佳實踐、HTTP/2、HSTS、重新導向設定、測試以及 6 個常見錯誤的排查方法。
在瀏覽器中取得免費 SSL 憑證
無需安裝,無需帳號。私鑰始終留在你的裝置上。
取得憑證