如何在Apache上默认启用完美的前向保密?

时间:2013-06-25 22:32:23

标签: apache ssl cryptography

警告: 请仅使用以下答案中的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完美前向保密?我怎么能强制执行呢?

8 个答案:

答案 0 :(得分:93)

怎么样:

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 attack

这将更倾向于完美的前向保密,但不以牺牲易受BEAST攻击为代价。由于Apache缺乏基于协议版本配置密码首选项的方法,我通过引用仅在较新协议中可用的密码来伪造它。具体来说,AES只能在TLSv1.2之前使用SHA1散列。因此,列表以TLSv1.2短暂的Diffie-Hellman密码开始,然后是RC4(首先是短暂的DH,然后是没有),最后是BEAST易受攻击的AES选项。排除最后没有auth /弱加密/弱哈希只是为了良好的卫生,可以省略,因为没有引入这样的密码。如果需要考虑性能,请仅使用EECDH并省略EDH。

结合Apache 2.2(因此没有像@Bruno所说的EECDH),每https://www.ssllabs.com/ssltest/analyze.html,这只能实现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-09:

我在网上发现了一些其他建议。他们不太重视BEAST保护(也许是明智的; BEAST是mostly mitigated client-side now)并且更强调完美的前向保密。在不同程度上,他们对GCM有更强的偏好,更不愿意接受RC4。

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

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

值得注意的是,Ivan Ristic和Geoffroy Gramaize的建议是禁用SSLv3。我认为这主要是打破IE6,但SSLv3和TLS v1.0之间的一些安全相关差异是mentioned on Wikipedia

在我没有谈论CRIMEBREACH之前。要防止CRIME,请禁用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攻击。

答案 1 :(得分:6)

根据我自己的理解,您需要激活SSLHonorCipherOrder,并在SSLCipherSuite

之前使用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

注意:Eliptic Curve DHE似乎只适用于Apache 2.3.3或更高版本(参见source和Bruno的评论)。

答案 2 :(得分: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

答案 3 :(得分:2)

提供Perfect Forward Secrecy的密码套件是那些使用Diffie-Hellman密钥交换的短暂形式的密码套件。它们的缺点是它们的开销,可以通过使用椭圆曲线变体来改进(参见Vincent Bernat's blog。)

Apache Httpd中的密码套件(假设您使用的是使用OpenSSL编译的mod_ssl)使用SSLCipherSuite进行配置,它使用openssl ciphers命令时看到的列表。如果您查看OpenSSL man page,您会发现kEDH正是您要找的。 (您也可以单独列出密码套件。)

答案 4 :(得分: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密码套件的信息。

答案 5 :(得分:2)

查看https://cipherli.st

你找到副本&amp;粘贴几个服务的配置片段,这应该确保强大的ssl安全设置。

答案 6 :(得分:2)

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

截至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

答案 7 :(得分:0)

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

-Xmx

简而言之:只允许TLS:所有版本都支持兼容性,DES-CBC3-SHA密码也允许兼容性。第一个,首选的两个密码使用Elliptic curve Diffie-Hellman,最后一个被添加为后备,因为a good option among the ciphers available XP/IE。如果你已经安装了最后一个OpenSSL版本,那么这个混合就足以在我写作的时候得到一个A.

希望这有用。