68

警告:请仅使用以下答案中的 Apache 配置建议。对于要使用的密码 - 安全规范会随着时间的推移而变化,下面的一些安全建议已经过时了。

在最近发生的事件之后,我一直在重新考虑我的 Apache 设置。目前,我的 apache 站点配置如下所示:

 <IfModule mod_ssl.c>
    <VirtualHost *:80>
            ServerName example.com
            ServerAlias www.example.com
            Redirect permanent / https://example.com
    </VirtualHost>

    <VirtualHost *:443>
            ServerAdmin webmaster@localhost
            ServerName example.com

            DocumentRoot /var/www-wordpress
            <Directory />
                    Options FollowSymLinks
                    AllowOverride None
            </Directory>
            <Directory /var/www-wordpress>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride FileInfo
                    Order allow,deny
                    allow from all
            </Directory>

            ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
            <Directory "/usr/lib/cgi-bin">
                    AllowOverride None
                    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                    Order allow,deny
                    Allow from all
            </Directory>

            ErrorLog ${APACHE_LOG_DIR}/error.log
            LogLevel warn

            CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
            SSLCertificateFile    /etc/ssl/certs/example.com.crt
            SSLCertificateKeyFile /etc/ssl/private/example.com.key
            SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem
            <FilesMatch "\.(cgi|shtml|phtml|php)$">
                    SSLOptions +StdEnvVars
            </FilesMatch>
            <Directory /usr/lib/cgi-bin>
                    SSLOptions +StdEnvVars
            </Directory>

            BrowserMatch "MSIE [2-6]" \
                    nokeepalive ssl-unclean-shutdown \
                    downgrade-1.0 force-response-1.0
            BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    </VirtualHost>

我必须做些什么来支持完美的前向保密?如何默认启用 SSL 完美前向保密?我怎么能强制执行?

4

8 回答 8

95

怎么样:

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5

请注意添加 -SSLv3 标志以禁用 SSLv3。这是为了防止POODLE 攻击而添加的。

这将更喜欢完美的前向保密,但不会以易受 BEAST 攻击为代价。由于 Apache 缺乏基于协议版本配置密码首选项的方法,我通过引用仅在较新协议中可用的密码来伪造它。具体来说,在 TLSv1.2 之前,AES 仅适用于 SHA1 散列。因此,该列表以 TLSv1.2 临时 Diffie-Hellman 密码开始,然后是 RC4(首先使用临时 DH,然后没有),最后是 BEAST 易受攻击的 AES 选项。最后排除无身份验证/弱加密/弱散列只是为了保持良好的卫生,可以省略,因为没有引入这样的密码。如果性能是一个问题,请仅使用 EECDH 并忽略 EDH。

根据https://www.ssllabs.com/ssltest/analyze.html结合 Apache 2.2(因此没有 EECDH,正如@Bruno 所说),这仅实现了 iOS Safari 的 PFS。IE 和 Firefox 是 TLSv1.0,所以他们使用 RC4 来避免 BEAST。(唉,没有像 EDH RC4 这样的东西,所以没有 EECDH,你就放弃了 PFS)。我相信,对于 Apache 2.2 上的那些浏览器来说,这是最好的希望。Chrome 是唯一一个服务不佳的,因为它支持 TLSv1.1 并且可以使用 EDH AES 而不会受到 BEAST 的攻击。相反,它像 Firefox 和 IE 一样获得 RC4-RSA。升级 Apache 以启用 EECDH RC4 应该会获得适用于 Firefox、IE 和 Chrome 的 PFS。

2013 年 11 月 9 日更新:

我在网上找到了一些替代建议。他们较少强调 BEAST 保护(也许是明智的;BEAST 现在主要是在客户端减轻),而更加强调完美的前向保密。他们在不同程度上也对 GCM 有更强的偏好,更不愿意接受 RC4。

我认为特别值得注意的是以下建议:

就个人而言,我将选择 Mozilla OpSec 的。他们的推理在他们的页面上得到了很好的解释。值得注意的是,他们更喜欢 AES128 而不是 AES256。用他们的话说:“ [AES128] 提供了很好的安全性,速度非常快,而且似乎更能抵抗定时攻击。

在 Ivan Ristic 和 Geoffroy Gramaize 的建议中值得注意的是 SSLv3 被禁用。我认为这主要只是破坏了 IE6,尽管在 Wikipedia 上提到了SSLv3 和 TLS v1.0 之间的一些安全相关差异。

同样在我没有谈论CRIMEBREACH 之前。要防止犯罪,请禁用 SSL 压缩。这包含在链接的示例中。要防止 BREACH,您需要在 HTTP 级别禁用压缩。对于 Apache 2.4,只需在全局范围内执行一次:

<Location />
  SetEnvIfExpr "%{HTTPS} == 'on'" no-gzip
</Location>

对于旧版本的 Apache,将其放置在 SSLEngine 所在的每个 VirtualHost 中:

<Location />
    SetEnv no-gzip
</Location>

2014-10-14 更新: Mozilla OpSec 指南现在分为旧/中/现代兼容性建议。使用中级或现代的设置,您最终会禁用 SSLv3。这将防止 POODLE 攻击。

于 2013-07-04T06:56:13.277 回答
7

根据我自己的理解,您需要激活SSLHonorCipherOrderSSLCipherSuite添加ECDHEDHE密码来自openssl ciphers -v

从我的/etc/apache2/mods-available/ssl.conf

SSLHonorCipherOrder on
SSLCipherSuite ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:AES128-SHA:RC4-SHA:HIGH:!aNULL:!MD5:!ADH

要测试您的网站,您可以使用:https ://www.ssllabs.com/ssltest

注意:椭圆曲线 DHE 似乎只适用于 Apache 2.3.3 或更高版本(参见源代码和布鲁诺的评论)。

于 2013-06-27T08:14:46.617 回答
3

在 main/core conf 指令的 httpd.conf 中输入此密码:

SSLCipherSuite AES128+EECDH:AES128+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off 
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 

您甚至可以通过在https://www.ssllabs.com/ssltest/analyze.html上对其进行测试来检查它的安全性状态?

于 2015-02-10T20:11:36.040 回答
3

提供完美前向保密的密码套件是使用 Diffie-Hellman 密钥交换的临时形式的密码套件。它们的缺点是开销,可以通过使用椭圆曲线变体来改进(请参阅文森特·伯纳特的博客。)

Apache Httpd 中的密码套件(假设您使用的是使用mod_sslOpenSSL 编译的)使用 配置,它采用您在使用命令SSLCipherSuite时看到的列表。openssl ciphers如果您查看OpenSSL 手册页,您会发现kEDH您正在寻找的内容。(您也可以单独列出密码套件。)

于 2013-06-27T13:10:42.897 回答
2

看看https://cipherli.st

在那里,您可以找到多个服务的复制和粘贴配置片段,这应该可以确保强大的 ssl 安全设置。

于 2015-02-27T20:16:27.437 回答
2

在您的 ssl.conf 中尝试以下代码:

SSLProtocol +TLSv1.2 +TLSv1.1 +TLSv1
SSLCompression off
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA

顺便一提,

专家提示:(1/n-1) 拆分记录技巧在 Firefox 中实现了一段时间。因此,您可以在高级配置菜单中安全地禁用 Firefox 上的 RC4。为此,请在地址栏中输入“about:config”,然后搜索“rc4”并将所有找到的值切换为“false”。如果您遇到连接问题,请将这些参数切换回 true。

https://cc.dcsec.uni-hannover.de/

该网站为您提供有关您的浏览器支持用于保护 HTTPS 连接的 SSL 密码套件的信息。

于 2014-04-05T01:53:24.030 回答
2

本文将帮助您配置前向安全性并让您了解当前标准 - https://community.quallys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-前向保密

截至 2015 年 9 月 16 日,这将使您在 SSLLabs 测试结果上获得 A。

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4
于 2015-09-17T00:08:31.670 回答
0

我在SSLLabs上获得了 A 级(2016 年 9 月),仍然支持 Windows XP / Internet Explorer 8,在 Apache 上使用这个 ssl.conf 配置:

SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite EECDH+AESGCM:AES256+EECDH:DES-CBC3-SHA

简而言之:仅允许TLS:支持所有版本以实现兼容性,并且也允许 DES-CBC3-SHA 密码以实现兼容性。第一个,首选的两个密码使用椭圆曲线 Diffie-Hellman,最后一个被添加为后备,因为这是可用的密码 XP/IE 中的一个不错的选择。如果你安装了最后一个可用的 OpenSSL 版本,那么在我写这篇文章的时候,这个组合就足以获得 A。

希望这会有所帮助。

于 2016-09-13T12:53:42.167 回答