必须禁用TLS 1.0/1.1,因其存在POODLE、BEAST等不可修复漏洞,不支持AEAD和前向保密,违反PCI DSS、GDPR、等保2.0等合规要求,且主流浏览器和云服务已全面淘汰。

要让 Nginx 的 HTTPS 服务兼容 IE6、IE7 等老旧浏览器,核心不是降级安全标准,而是针对性解决它们在 TLS 握手、加密套件、重定向和响应格式上的已知缺陷。现代配置中直接启用 TLS 1.0/1.1 或弱加密套件风险极高,应优先采用“有限兼容 + 显式兜底”的策略。
适配 TLS 协议与加密套件
老旧浏览器(如 IE6 on Windows XP)仅支持 TLS 1.0,且依赖特定 RSA 或 3DES 类套件。Nginx 需显式启用并排序:
- 在 HTTPS server 块中设置:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;(注意:TLSv1.3 不兼容旧 IE,无需添加) - 指定兼容性更强的套件,例如:
ssl_ciphers 'ECDHE-RSA-AES128-SHA:AES128-SHA:DES-CBC3-SHA';
其中DES-CBC3-SHA是 IE6 最终可协商的兜底选项 - 必须开启
ssl_prefer_server_ciphers on;,确保服务端主导套件选择
避免 HSTS 和现代安全头干扰
IE6–IE8 对 HSTS、CSP、Expect-CT 等现代安全头无解析能力,可能引发响应异常或连接中断:
- 彻底移除
add_header Strict-Transport-Security指令;若业务强制要求,设为max-age=0禁用缓存 - 不启用
upgrade-insecure-requests(IE6 不支持 CSP),该头对旧浏览器无效,还可能触发解析错误 - 禁用 OCSP Stapling:
ssl_stapling off;(旧客户端无法处理 OCSP 响应扩展)
修复 HTTP 响应行为缺陷
IE5.5–IE6 在 HTTPS 下仍会复现 HTTP 层的老问题,需同步启用协议层兼容指令:
- 在对应 HTTPS server 块内添加:
msie_padding on;(防短响应截断,如空 JSON 返回) - 搭配启用:
msie_refresh on;(为 302 跳转自动补Refresh: 0; url=...,提升登录/表单提交稳定性) - 禁止与
chunked_transfer_encoding off;共存——老 IE 本就不支持 chunked,关编码反而导致响应混乱
推荐的最小可行兼容配置片段
以下仅作用于需支持旧客户端的特定 server 块(不建议放在全局 http 块):
server {
listen 443 ssl;
server_name legacy.example.com;
<pre class='brush:php;toolbar:false;'>ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-SHA:AES128-SHA:DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_stapling off;
add_header Strict-Transport-Security "max-age=0" always;
msie_padding on;
msie_refresh on;
location / {
# 后端返回短响应时,确保 Content-Length 准确(如 FastCGI)
# 避免被 CDN 或代理剥离该头
proxy_pass http://backend;
}}


















