ssloptions仅控制ssl/tls运行时行为(如环境变量传递、证书导出、重协商),不涉及协议版本或密码套件配置;启用旧协议需用sslprotocol和sslciphersuite等指令。

SSLOptions 指令不能用于开启或关闭 TLS/SSL 协议版本(如 SSLv3、TLSv1.0 等),也不支持启用“Legacy 加密协议兼容”这类行为。它只控制 SSL/TLS 运行时的环境变量传递、证书导出、重协商等应用层行为,和协议版本、密码套件、曲线选择完全无关。
如果你实际想做的是:
✅ 让 Apache 支持老旧客户端(如 Windows XP + IE6、旧版 Java 6、嵌入式设备)所需的弱协议或弱密码
❌ 那么 SSLOptions 是无效的——你需要用 SSLProtocol 和 SSLCipherSuite,并配合 SSLOpenSSLConfCmd(如需底层禁用/启用特定 OpenSSL 行为)。
一、明确 SSLOptions 的能力边界
SSLOptions 只影响这些事:
- 是否向 CGI/PHP 注入
SSL_PROTOCOL、SSL_CIPHER等变量(用+StdEnvVars) - 是否把客户端证书内容传给后端(
+ExportCertData) - 是否允许连接中重协商(
+OptRenegotiate,但现代 OpenSSL 已默认禁用) - 是否强制校验失败返回 403(
+StrictRequire,需搭配SSLRequire)
它不控制:
- TLS 版本开关(那是
SSLProtocol的职责) - 密码套件列表(那是
SSLCipherSuite) - 椭圆曲线优先级(那是
SSLOpenSSLConfCmd Curves) - OpenSSL 底层选项如
SSL_OP_NO_TLSv1_0(那是SSLOpenSSLConfCmd Options)
所以,写 SSLOptions +LegacyProtocolSupport 或类似变体 —— 语法错误,Apache 直接拒绝启动。
二、真正开启 Legacy 兼容的正确配置项
要支持老客户端,需三步协同:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
✅ 启用旧协议版本
SSLProtocol all -TLSv1.2 -TLSv1.3 # 或更激进(含已废弃的 TLSv1.0 / SSLv3,仅限测试环境!) SSLProtocol +SSLv3 +TLSv1 +TLSv1.1 -TLSv1.2 -TLSv1.3
⚠️ 注意:SSLv3 和 TLSv1.0 已被 RFC 明确弃用,存在 POODLE、BEAST 等高危漏洞,生产环境严禁启用。
✅ 放宽密码套件限制
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
这会包含 DES-CBC3-SHA、AES128-SHA 等老套件,但也要注意:OpenSSL ≥1.1.0 默认禁用 SSLv3 和部分弱套件,即使配置了也无效。
✅ (可选)透传 OpenSSL 底层兼容开关(仅限 Apache 2.4.11+ & OpenSSL ≥1.0.2)
SSLOpenSSLConfCmd Options -UnsafeLegacyRenegotiation # 注意:这是 *关闭* 不安全重协商;若真需兼容极老客户端,某些场景反而要保留该选项(不推荐) # 但没有 "EnableLegacyProtocol" 这类指令 —— 协议开关只在 SSLProtocol 生效
三、验证是否生效的关键点
-
httpd -t通过 ≠ 配置生效:旧版 Apache 忽略SSLOpenSSLConfCmd且不报错 - 用
openssl s_client -connect example.com:443 -tls1测试是否真能握手 TLSv1.0 - 查看
error_log中是否有AH02001: SSL handshake failed或no ciphers available - 老客户端访问时抓包确认 ClientHello 中的
version和cipher_suites
四、强烈建议替代方案
与其降级安全来迁就旧设备:
- 在前端加一层兼容代理(如 Nginx 1.10+ 配 TLSv1.0 专用 upstream)
- 升级客户端环境(Java 8u161+、.NET 4.6+、IE11+ 均支持 TLSv1.2)
- 使用 Let’s Encrypt + 自动续期 + OCSP Stapling,兼顾安全与兼容性
Legacy 兼容不是功能增强,而是安全负债。除非法律或硬件强制要求,否则不应主动开启。










