运维同事拿着SSL Labs的检测报告来找你,评级只有B。领导要求升到A+,但没人清楚差在哪。其实从B到A+,核心就三个动作:关旧协议、选对加密套件、开HSTS。下面逐项拆解。
第一步:关闭TLS 1.0和TLS 1.1
评级卡在B,最常见的原因就是还在支持TLS 1.0或1.1。这两个协议已经被RFC 8996正式废弃,存在已知安全漏洞。Nginx配置里加上:
ssl_protocols TLSv1.2 TLSv1.3;
Apache对应写法:
SSLProtocol -all +TLSv1.2 +TLSv1.3
改完重启,评级通常直接跳到A。注意:如果你的用户群体里有非常老旧的设备(比如Android 4.x),关掉TLS 1.0可能导致这部分用户无法访问。评估一下受众再决定。
第二步:收紧加密套件
默认的加密套件列表里可能包含弱算法(如RC4、3DES)。手动指定强加密套件,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 on;,让服务器决定用哪个套件,而不是让客户端挑。
第三步:开启HSTS拿A+
从A到A+,差的就一个HSTS头。在Nginx的server块里加:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
max-age设为31536000秒(一年),includeSubDomains覆盖子域名,preload表示允许被加入浏览器的HSTS预加载列表。配好后重新跑一次SSL Labs检测,A+到手。最后提醒:HSTS一旦生效,浏览器会强制走HTTPS,如果后续证书过期没及时续签,用户将完全无法访问。开HSTS前确保证书续签机制已经跑通。