SSLOptions 不控制加密算法、协议版本或 Legacy 加密支持,仅管理 SSL/TLS 运行时行为;Legacy 加密由 SSLProtocol 和 SSLCipherSuite 决定。

Apache 的 SSLOptions 指令本身**不控制加密算法、协议版本或“Legacy 加密支持”**。它只管理 SSL/TLS 运行时行为,比如环境变量传递、证书导出、重协商等。所谓“Legacy 加密支持”(如 SSLv3、RC4、MD5 签名、导出级密码套件)是由 SSLProtocol 和 SSLCipherSuite 决定的,与 SSLOptions 无关。
SSLOptions 和 Legacy 加密完全无关
SSLOptions 不处理以下任何一项:
- TLS 版本启用/禁用(那是
SSLProtocol的职责) - 密码套件选择(那是
SSLCipherSuite的职责) - 签名算法、密钥交换方式、哈希强度
- 是否允许弱加密连接
试图通过 SSLOptions +XXX 来“开启 Legacy 加密”,在技术上不可行,Apache 也不会识别这类参数。
真正控制 Legacy 加密的是 SSLProtocol 和 SSLCipherSuite
若你确实需要兼容极旧客户端(例如 Windows XP + IE6),需显式放宽限制:
- 启用老旧协议:
SSLProtocol all -TLSv1.2 -TLSv1.3(保留 SSLv3、TLSv1、TLSv1.1) - 放宽密码套件:
SSLCipherSuite ALL:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA - 禁用前向保密(PFS)要求(可选):
SSLHonorCipherOrder off
⚠️ 注意:上述配置严重降低安全性,已不被 PCI DSS、GDPR、主流浏览器及现代操作系统接受。2026 年绝大多数生产环境应禁用 SSLv3/TLSv1.0,并移除所有 RC4、DES、MD5 相关套件。
SSLOptions 可能被误关联的常见场景
有些用户以为开启 +StdEnvVars 就能“让后端看到旧协议信息”,其实它只是把当前协商出的协议名(如 SSL_PROTOCOL=TLSv1.1)以环境变量传给 PHP/CGI —— 这个值由实际握手结果决定,SSLOptions 不参与协商过程。
- 要调试协商结果,可配合
+StdEnvVars,再在 PHP 中检查$_SERVER['SSL_PROTOCOL']和$_SERVER['SSL_CIPHER'] - 但改变这些变量输出,绝不等于改变了加密能力
安全建议:替代 Legacy 的务实做法
与其降级整个站点的安全基线,更推荐:
- 为遗留设备单独配置一个受限子域名(如
legacy.example.com),仅对该虚拟主机启用宽松的SSLProtocol/SSLCipherSuite - 确保该子域不处理敏感数据、不共享会话 Cookie、不启用 HTTP/2
- 记录并监控该子域的访问来源,制定淘汰计划
- 优先升级客户端环境,而非长期维持不安全配置











