Kyl*_*wry 13 ssl mod-ssl openssl tls apache-2.2
我有一个运行 Apache 2.2.22 和 mod_ssl 和 OpenSSL v1.0.1 的 Ubuntu 12.04.2 LTS 服务器。
在我的虚拟主机配置(一切在其中表现为我所期望的),我有SSLProtocol
跟线-all +SSLv3
。
通过这种结构,TLS 1.1和1.2都启用并正确的工作-这是反直觉和我说话,我会认为只有SSLv3的将被启用考虑到的配置。
我可以很好地启用/禁用 TLSv1 -/+TSLv1
,并且它按预期工作。但是+/-TLSv1.1
并且+/-TLSv1.2
不是有效的配置选项 - 所以我不能那样禁用它们。
至于我为什么要这样做 - 我正在处理一个第三方应用程序(我无法控制),它在启用 TLS 的服务器上有一些错误行为,我需要完全禁用它才能继续前进。
Mat*_*sen 23
对这个错误很感兴趣(是的,我已经能够重现它)我查看了最新稳定版本的源代码mod_ssl
并找到了解释。忍受我,这会导致业余堆栈溢出:
当SSLProtocol
被解析,这导致了char
看起来像这样:
0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1
Run Code Online (Sandbox Code Playgroud)
在启动新的服务器上下文时,将启用所有可用协议,并char
使用一些漂亮的按位 AND 操作检查上述内容,以确定应禁用哪些协议。在这种情况下,SSLv3 是唯一明确启用的协议,其他 3 个协议将被禁用。
OpenSSL 支持 TLSv1.1 的协议设置,但由于SSLProtocol
不考虑此选项,因此它永远不会被禁用。OpenSSL v1.0.1 对 TLSv1.2 有一些已知问题,但如果支持它,我想这与 TLSv1.1 相同;它不被 mod_ssl 识别/处理,因此永远不会被禁用。
SSLProtocol
在第 925 行解析pkg.sslmod/ssl_engine_config.c
上述函数中使用的选项在第 444 行定义pkg.sslmod/mod_ssl.h
所有协议在第 586 行启用,pkg.sslmod/ssl_engine_init.c
此后在后续行中禁用特定协议
您有几个选择:
Protocols All,-TLSv1.1,-TLSv1.2
mod_ssl
;-)