如何在 Apache 中禁用 TLS 1.1 和 1.2?

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 识别/处理,因此永远不会被禁用。

mod_ssl 的源代码参考:

SSLProtocol在第 925 行解析pkg.sslmod/ssl_engine_config.c
上述函数中使用的选项在第 444 行定义pkg.sslmod/mod_ssl.h
所有协议在第 586 行启用,pkg.sslmod/ssl_engine_init.c此后在后续行中禁用特定协议

那怎么禁用呢?

您有几个选择:

  1. 在 OpenSSL 配置文件中禁用它:
    Protocols All,-TLSv1.1,-TLSv1.2
  2. 重写mod_ssl;-)