禁用 Apache 2 中所有旧版本的 SSL 以强制通过 TLS 1.2 进行身份验证?

禁用 Apache 2 中所有旧版本的 SSL 以强制通过 TLS 1.2 进行身份验证?

我读这里需要禁用所有(旧?)版本的 SSL 才能强制执行 TLS 1.2 身份验证。如何在 Apache 2 上执行此操作?

答案1

我在这里看到,为了强制进行 TLS 1.2 身份验证,需要禁用所有(旧?)版本的 SSL。

这不是它所说的!它说的是需要禁用所有版本的 SSL 才能强制使用 TLS - 而不是强制使用 TLSv1.2。

SSL/TLS 有多个版本,按使用年限和安全性依次递增:

  1. SSLv2
  2. SSLv3
  3. TLSv1
  4. TLSv1.1
  5. TLSv1.2

SSLv1 从未向公众开放,TLSv1.3 目前正在开发中。

理论上,浏览器应该使用它和服务器都支持的最强大的版本,但是存在降级攻击,导致使用较低版本,然后可能破坏该版本,因此最好关闭您不想使用的版本,这样它们就无法使用。

人们普遍认为 SSLv2 和 SSLv3 现在已经不安全了,因为它们存在多种缺陷,而且计算能力的提高也意味着它们很容易被破解。因此,您一定要使用以下方法禁用它们:

SSLProtocol all -SSLv2 -SSLv3

注意:SSLv2 现在通常默认关闭,但明确关闭并无坏处。

TLSv1 很有趣。PCI 合规标准(用于您在网站上接受卡付款时)最近也要求关闭 TLSv1,但对于仍在使用的某些浏览器来说,它仍然是必需的,因此这可能会损害您的某些用户(例如 XP 上的 IE8 用户 - 是的,即使 XP 已正式退役且不受支持,它仍在使用)。我个人认为我们几乎准备好关闭它了,但还没有完全关闭。

TLSv1.1 是另一个有趣的版本。TLSv1.2 随后不久发布,几乎所有支持 1.1 的浏览器也支持 1.2,因此 1.1 的使用率很小。因此,如果您希望巩固您的 SSL/TLS 配置,那么最好跳过这一步,直接使用 TLSv1.2,而不是两者兼而有之,这样可以避免在以后发现某些漏洞时将其关闭。另一方面,它仍然是安全的,也许那一小部分浏览器就是您的部分访问者。

因此,如果您只想要 TLSv1.2(将来可以选择 TLSv1.3),那么您可以使用此配置:

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

或者只是这样(尽管无论之后出现什么,都限制您只能使用 TLSv1.2):

SSLProtocol TLSv1.2

您还可以使用自定义日志格式测量当前的使用情况,这样您就可以看到有多少访问者仍在使用 TLSv1,例如:http://httpd.apache.org/docs/current/mod/mod_ssl.html#logformats

然而,这并不是强大的 https 设置的全部内容。

首先,它很大程度上取决于您安装的 OpenSSL 版本和/或编译它的版本。这可能意味着您甚至无法使用 TLSv1.2 - 仍有许多 OpenSSL 0.9.8 安装!

接下来是您在 SSL/TLS 版本中使用的 CipherSuite。有些比其他的更安全,有些的性能损失更大。您还应该指定服务器应指定顺序,以便使用最强大的套件。这是(在撰写本文时)一个强烈建议,仍然具有良好的旧版支持:

SSLHonorCipherOrder on
SSLCipherSuite "EECDH+AES128:EECDH+AES256:+SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RSA+3DES:!DSS"

然后还有其他选项,例如压缩,HSTS,CT,HPKP 和 OCSP 装订,但它们确实是专业主题,超出了本问题的范围(如果有兴趣进一步阅读,可以在此处找到有关它们的博客:https://www.tunetheweb.com/security/https/

测试 https 设置的最佳方法是在线https://www.ssllabs.com/ssltest工具。只需输入您的网站地址,几分钟后您就会收到一份关于您的设置有多好的报告。恕我直言,没有理由不在这里获得 A 级,除非您使用的是旧硬件/软件(在这种情况下您为什么不升级?)。如果照看网站,我强烈建议每季度重新运行一次该测试,以检查您可能需要执行的任何新开发和配置更改,以保持配置处于领先地位。

答案2

这是不正确的,仅使用 TLSv1.2 将会消除一些浏览器兼容性,并且不会修复所有 SSL 漏洞。

如果 SSL 不再被广泛使用,那是因为发现了一些安全漏洞。但这并不能解决所有问题。

为了有效,您需要更新 OpenSSL 版本,并使用 Apache 配置来消除其他漏洞

这里是保护您的 SSL 的配置,可以提高浏览器兼容性,且不容易受到攻击:

SSLEngine on
SSLOptions +StrictRequire
SSLProxyEngine on

# Prevent Beast attack
SSLHonorCipherOrder on

# SSL Compression (CRIME attack)
SSLCompression off

# HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; pr$

# PROTOCOL
SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4

之后,您可以在此网站上测试您的 SSL 安全级别https://www.ssllabs.com/ssltest

答案3

  1. 更新到 Apache 2 的最新版本。
  2. 更新到最新版本的 OpenSSL 1.0.1+。
  3. 编辑 Apache ssl.conf 或 httpd.conf

添加

# only use TLSv1.2 and above, to have SHA-256 and GCM
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

重新启动 Apache。

相关内容