所有 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 证书
无需安装,无需账号。私钥始终留在你的设备上。
获取证书