要获得 ssl labs 的 a+ 评分,必须禁用 tls 1.0/1.1,仅启用 tls 1.2/1.3;使用支持前向保密的强密码套件;强制启用 hsts(含 includesubdomains)、ocsp stapling 和会话复用;确保证书链完整、http/2 开启、80 端口 301 跳转 https。

想拿 SSL Labs 的 A+ 评分,核心不是堆参数,而是精准控制 TLS 握手行为、证书验证链和响应头策略。A+ 是结果,不是目标——它反映的是你是否真正关掉了老旧协议、用对了加密套件、启用了关键优化项,并且没有漏掉 HSTS 或 OCSP Stapling 这类“小但致命”的细节。
证书与协议层:只留 TLS 1.2 和 1.3
必须禁用 TLS 1.0 和 1.1,它们已被标准弃用,且无法通过 A+ 测试。Nginx 配置中明确指定:
- ssl_protocols TLSv1.2 TLSv1.3; —— 不写 TLSv1.1,不加空格或多余版本
- TLS 1.3 默认启用现代密钥交换(如 X25519),无需额外配置曲线参数,但确保 OpenSSL 版本 ≥ 1.1.1(Nginx ≥ 1.13.0)
- 若使用 Let's Encrypt,确认 fullchain.pem 包含完整证书链(域名证书 + 中间证书),否则 OCSP 和链验证会失败
密码套件:优先前向安全,拒绝弱算法
A+ 要求所有启用的密码套件必须支持前向保密(PFS),且禁用 SHA-1、RC4、DES、3DES、NULL、EXPORT 等已知不安全算法。推荐配置:
- ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
- ssl_prefer_server_ciphers off; —— TLS 1.3 下该指令被忽略,但保留可避免旧客户端兼容问题;实际生效的是 cipher list 本身顺序
- 避免使用
HIGH、!aNULL这类模糊别名,它们在不同 OpenSSL 版本中含义可能变化
关键加固项:HSTS、OCSP Stapling、会话复用
这三项是 A+ 的硬门槛,缺一不可:
-
HSTS:添加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;。注意:always确保 301 重定向也带 header;preload是可选但推荐,用于提交至浏览器 HSTS Preload List -
OCSP Stapling:启用后能减少客户端直连 CA 延迟并提升隐私。
ssl_stapling on;、ssl_stapling_verify on;,并配一个可靠 DNS(如resolver 8.8.8.8 1.1.1.1 valid=300s;) -
会话复用:用
ssl_session_cache shared:SSL:10m;和ssl_session_timeout 4h;提升 TLS 1.2 复用率;TLS 1.3 自带 PSK 复用机制,无需额外干预
HTTP/2 与自动跳转:基础体验不打折
虽不直接影响 A+ 分数,但缺失会显著降低实际安全性与可用性:
- 监听行写成
listen 443 ssl http2;,确保内核和 OpenSSL 支持 ALPN(现代发行版默认满足) - 80 端口必须 301 跳转 HTTPS:
return 301 https://$host$request_uri;,不能用 rewrite - 避免混合内容:页面内所有资源(js/css/img/iframe)必须用相对协议或 https:// 加载,否则浏览器会降级为“不安全”标识
配置完成后,用 nginx -t && nginx -s reload 生效,再用 SSL Labs 测试工具 验证。分数卡在 A 而非 A+,大概率是 HSTS 缺 includeSubDomains、OCSP resolver 不可达、或证书链不完整——逐项对照报告里的 Failure Detail 最有效。











