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


13

我有一台运行Apache 2.2.22和mod_ssl和OpenSSL v1.0.1的Ubuntu 12.04.2 LTS服务器。

在我的vhosts配置中(其中所有其他行为均与我期望的一样),我有SSLProtocol一行-all +SSLv3

使用该配置,启用了TLS 1.1和1.2并可以正常工作-这与我的直觉相反,因为我希望在该配置下启用S​​SLv3。

我可以通过启用/禁用TLSv1 -/+TSLv1,它可以按预期工作。但是+/-TLSv1.1+/-TLSv1.2它们也不是有效的配置选项-所以我不能那样禁用它们。

至于我为什么要这样做-我正在处理一个第三方应用程序(我无法控制),该应用程序在启用TLS的服务器上有一些错误行为,因此我需要完全禁用它以继续前进。


只是出于好奇-请问为什么您要首先禁用TSL?从我收集到的信息来看,它应该比SSLv1 / 2/3更安全,所以我只能想象仅允许v1.2而不允许v1.1的原因(这就是让我来到这里的原因),而不是禁用它的原因支持SSL,但可能与旧版软件存在一些兼容性问题?
2014年

@codeling使用具有TLS错误的旧的第三方软件。
2014年

Answers:


23

对此错误引起了好奇(是的,我已经能够复制它),我查看了最新稳定版本的源代码mod_ssl并找到了解释。忍受我,这会导致业余堆栈过多:

SSLProtocol被解析,这导致了char看起来像这样:

0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1

启动新的服务器上下文后,将启用所有可用协议,并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;-)

看起来是一个完美的答案,只需要验证一下:哪个/哪个/哪个OpenSSL配置文件?
凯尔·洛瑞

openssl.cnf-位置取决于安装。在Debian上/etc/ssl/openssl.cnf,我在OS X /System/Library/OpenSSL/openssl.cnf和Windows 7上找到了它%systemdrive%\openssl\openssl.cnf
Mathias R. Jessen

1
我现在在看配置文件。语法看起来与我根据您的答案所期望的略有不同,并且我似乎无法在线找到任何明确表明可以控制从该配置文件启用/禁用的协议的内容。您对此有任何参考吗?谢谢。
凯尔·洛瑞

另一种选择-使用:SSLProtocol以与上面相同的方式使用(SSLProtocol All -TLSv1.1 -TLSv1.2(不需要逗号)),但是在全局或特定的Apache配置下,以“覆盖”上述任何SSL全局配置。(如果您不希望更改所有基础SSL密码->由于您所需的密码被认为很弱。)
bshea


1

首先,您必须确定服务器中端口443默认虚拟主机(Apache加载的第一个SSL虚拟主机)并编辑其配置文件。大多数用户的服务器中都有一个ssl.conf文件,并在其中配置了用于端口443的虚拟主机。由于此文件的名称以“ s”开头,因此它将在vhosts.conf(以“ v”开头)中配置的vhost之前加载。因此,请检查您是否遇到这种情况(几乎每个人的答案都是“是”),然后更改该文件中的协议。够了!

这里发布了类似的问题:如何在Apache中禁用TLS 1.1和1.2?。根据HBruijn:

除非您拥有IP虚拟主机,否则实际上,首次出现SSLProtocol指令的设置将用于整个服务器和/或所有支持TLS的基于名称的虚拟主机

这里还有另一个:是否可以在Apache中为单个VirtualHost(长卷毛狗)设置SSLProtocol?。根据vallismortis的说法:

您只能为配置文件中的第一个VirtualHost设置SSLProtocol。所有后续的VirtualHost条目都将从第一个条目继承该设置,并且由于OpenSSL错误而无视其自身的设置。

顺便说一句:对于给定的端口,服务器中的默认虚拟主机是响应该端口的请求的主机,该请求在没有服务器名称标识(或服务器名称错误)的情况下到达服务器。示例:在浏览器的地址栏中键入IP或由于错误的DNS表导致错误的重定向。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.