无法关闭 Apache 2.4.9 上的 SSLv3,否则会丢失 TLS 1.1 和 1.2

无法关闭 Apache 2.4.9 上的 SSLv3,否则会丢失 TLS 1.1 和 1.2

我在两台 Linux 服务器上遇到了一个有趣的问题Apache 2.4.9:我试图禁用 SSL v3 和 RC4,以阻止 POODLE 并保持SSL 实验室很高兴。但是,每当我关闭 SSL v3 时,我也会丢失 TLS 1.1 和 1.2(仅保留 TLS 1.0)。

这是我的 Apache 版本:

$ apachectl -v
Server version: Apache/2.4.9 (Unix)
Server built:   Mar 24 2014 10:51:20

和 OpenSSL:

$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

Linux 上:

$ cat /proc/version
Linux version 2.6.32-279.11.1.el6.x86_64 ([email protected]) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Sat Sep 22 07:10:26 EDT 2012

以下是我尝试过的:

# TLS 1.0 only
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite MEDIUM:HIGH:!RC4

第一个是我期望能起作用的,并且我已在其他 Apache 安装中成功使用了它。结果仅是 TLS 1.0。

# SSLv3, TLS1.0, 1.1, 1.2
SSLProtocol all -SSLv2
SSLCipherSuite MEDIUM:HIGH:!RC4

这将关闭 RC4,并保留 TLS 1.0、1.1 和 1.2,但 SSL v3 也被启用。

最后:

# TLS 1.2 only
SSLProtocol all 
SSLCipherSuite MEDIUM:HIGH:!RC4:!SSLv3

此组合仅产生 TLS 1.2(无 TLS 1.0 或 1.1,无 SSL)。

我认为这是我的 Apache 中的 mod_ssl 的一个错误。我很好奇这里是否有人见过这种情况,以及您是否找到了启用 TLS 1.0、1.1 和 1.2 但禁用 SSL 的方法。

谢谢。

答案1

使用 MEDIUM 是否会阻止启用 TLS 1.1 和 1.2?以下是我的配置。我不记得为什么我强制设置密码顺序。我刚刚检查了Qualys并且显示仅启用了 TLS 1.0、1.1、1.2。

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK

答案2

这里有几件事要做。首先,您要定义要支持的传输层安全协议版本,其次,您要定义支持的密码,这些密码将在 TLS 握手的客户端 hello 阶段进行协商。

根据此处 2.4 的 apache 文档:https://httpd.apache.org/docs/2.4/mod/mod_ssl.html

您需要定义您支持的 TLS 版本,在您的 vhost 容器中使用如下行:

SSLProtocol TLSv1.1 TLSv1.2

然后,您还需要在 vhost 容器中定义密码(包括以下内容作为示例):

SSLCipherSuite AES+kRSA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4

相关内容