ssloptions 不控制 tls 协议版本或加密套件,仅影响运行时行为(如证书传递、环境变量注入);协议兼容性须由 sslprotocol 和 sslciphersuite 指令配置。

SSLOptions 指令不能用于开启对“Legacy加密协议”的兼容——这个需求本身存在根本性误解。
SSLOptions 不控制 TLS 协议版本,也不启用或禁用 SSL/TLS 加密套件。它只影响 SSL/TLS 运行时行为的细节,比如环境变量注入、证书传递、重协商策略等。
所谓“Legacy加密协议”(如 SSLv3、TLS 1.0/1.1、弱密码套件)的开关,由另外两个独立指令严格管理:
-
SSLProtocol:决定允许哪些协议版本 -
SSLCipherSuite:决定允许哪些加密算法和密钥交换方式
而 SSLOptions 对这两者完全无影响。
✅ 正确做法:用 SSLProtocol 和 SSLCipherSuite 控制协议兼容性
如果你确实需要兼容老旧客户端(例如某些嵌入式设备、旧版 Java 客户端),应明确配置以下两项:
1. 启用旧协议版本(不推荐,仅限必要场景)
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3
⚠️ 注意:
-
-TLSv1和-TLSv1.1表示禁用;若需兼容,应移除这两项或显式加上+TLSv1/+TLSv1.1 - OpenSSL 1.1.1+ 默认已禁用 TLS 1.0/1.1,Apache 需搭配旧版 OpenSSL(如 1.0.2)才能真正协商成功
- 现代浏览器、curl、主流操作系统均已弃用 TLS 1.0/1.1,启用会显著降低安全性
2. 添加弱密码套件(同样不推荐)
SSLCipherSuite ALL:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA SSLHonorCipherOrder on
? 提示:ALL 包含大量已知不安全的套件(如 EXP-RC4-MD5、DES-CBC3-SHA),仅在调试或封闭内网中临时使用。
❌ SSLOptions 常见误用(与协议兼容无关)
以下写法不会让 TLS 1.0 生效,也不会修复“客户端握手失败”问题:
SSLOptions +StdEnvVars # 只影响 $_SERVER['SSL_PROTOCOL'] 是否可用 SSLOptions +ExportCertData # 只影响是否把客户端证书传给 PHP/CGI SSLOptions +OptRenegotiate # 与协议版本无关,且现代 OpenSSL 已废弃该功能
如果客户端连不上,先检查:
-
openssl s_client -connect example.com:443 -tls1是否能连通(验证 TLS 1.0) - Apache 错误日志中是否有
no protocols available或no ciphers available -
httpd -V | grep -i openssl输出的 OpenSSL 版本是否支持目标协议
? 安全提醒
TLS 1.0 和 TLS 1.1 已被 PCI DSS、NIST、GDPR 等标准明确要求禁用。
除非你面对的是无法升级的专用硬件(如工业控制器、老 POS 终端),否则不应主动降级协议。更稳妥的替代方案是:
- 在反向代理层(如 Nginx)做协议适配
- 使用兼容中间件桥接旧客户端与新服务
- 推动终端设备固件升级
SSLOptions 的职责很清晰:管“怎么传证书”,不管“用什么协议”。混淆二者,只会导致配置无效或安全隐患。










