SSL/TLS协议的版本直接决定了加密的安全性。必须禁用不安全的旧版本(SSLv2、SSLv3、TLSv1.0、TLSv1.1),仅启用TLSv1.2及以上版本(尤其是TLSv1.3)。
ssl_protocols TLSv1.2 TLSv1.3; # 仅启用TLSv1.2和TLSv1.3
加密套件决定了数据加密的算法组合(如密钥交换、加密、哈希等)。优先选择支持前向保密(Ephemeral Key Exchange)、强哈希算法的套件,并禁用不安全的算法(如RC4、DES、MD5、CBC模式)。
TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256(均支持前向保密,性能优异)。ECDHE-RSA-AES128-GCM-SHA256、ECDHE-RSA-AES256-GCM-SHA384(使用ECDHE密钥交换实现前向保密,AES-GCM提供高效加密)。RC4(流加密算法,易受攻击)、DES(密钥长度过短,已被破解)、MD5(哈希算法碰撞风险高)、aNULL/eNULL(无身份验证/加密)、EXPORT(出口级加密,强度极低)。ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on; # 优先使用服务器端配置的套件(避免客户端选择弱套件)
ECDHE或DHE(如上述推荐的套件)。ssl_stapling on; # 启用OCSP Stapling
ssl_stapling_verify on; # 验证OCSP响应的有效性
resolver 8.8.8.8 1.1.1.1; # 指定DNS解析器(用于获取OCSP响应)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
ssl_session_cache shared:SSL:10m; # 共享内存缓存,10MB可存储约4000个会话
ssl_session_timeout 10m; # 会话有效期10分钟(平衡安全性与性能)
nginx -t命令检查语法是否正确。error_log和access_log,监控SSL握手失败、证书错误等问题。通过以上步骤,可选择并配置适合的SSL加密等级,在安全性(抵御中间人攻击、数据泄露)与兼容性(支持主流客户端)之间取得平衡。需定期关注Nginx、OpenSSL的安全更新,及时调整配置以应对新的威胁。