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

如何在Apache上默认启用完美的前向保密?,apache,ssl,cryptography,Apache,Ssl,Cryptography,警告:请仅使用下面答案中针对Apache配置的建议。使用哪种密码-安全规范会随着时间的推移而变化,下面的一些安全建议已经过时 在最近的事件之后,我一直在重新考虑我的Apache设置。目前,我的apache站点配置如下所示: <IfModule mod_ssl.c> <VirtualHost *:80> ServerName example.com ServerAlias www.example.com

警告:请仅使用下面答案中针对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>

ServerName example.com
ServerAlias www.example.com
重定向永久/https://example.com
服务器管理员webmaster@localhost
ServerName example.com
DocumentRoot/var/www-wordpress
选项如下符号链接
不允许超限
选项索引跟随符号链接多视图
AllowOverride文件信息
命令允许,拒绝
通融
ScriptAlias/cgi-bin//usr/lib/cgi-bin/
不允许超限
选项+执行CGI-多视图+符号链接所有者匹配
命令允许,拒绝
通融
ErrorLog${APACHE_LOG_DIR}/error.LOG
日志级别警告
CustomLog${APACHE\u LOG\u DIR}/ssl\u access.LOG组合
SSLCertificateFile/etc/ssl/certs/example.com.crt
SSLCertificateKeyFile/etc/ssl/private/example.com.key
SSLCertificateChainFile/etc/ssl/certs/sub.class1.server.ca.pem
发展+标准
发展+标准
浏览器匹配“MSIE[2-6]”\
nokeepalive ssl不干净关闭\
降级-1.0力响应-1.0
BrowserMatch“MSIE[17-9]”ssl不干净关闭

我必须做些什么来支持完美的前向保密?默认情况下,如何启用SSL完美前向保密?我怎样才能执行它

根据我自己的理解,您需要激活
SSLHonorCipherOrder
,并使用
ECDHE
DHE
密码从
openssl密码-v

从my
/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
要测试您的网站,您可以使用:


注:Eligistic Curve DHE似乎只适用于Apache 2.3.3或更高版本(请参阅和Bruno的评论)。

提供完美前向保密性的密码套件是使用Diffie-Hellman密钥交换的短暂形式的密码套件。它们的缺点是它们的开销,可以通过使用椭圆曲线变量来改善开销(请参阅)

apachehttpd中的密码套件(如果您使用的是用OpenSSL编译的
mod_ssl
)是使用
SSLCipherSuite
配置的,该套件使用
OpenSSL密码
命令时会看到一个列表。如果你看一下,你会发现
kEDH
就是你要找的。(您也可以单独列出密码套件。)

如何:

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。添加此选项是为了防止出现错误

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

结合Apache2.2(因此没有@Bruno所说的EECDH),per实现了仅用于iOS Safari的PFS。IE和Firefox是TLSv1.0,所以他们使用RC4来避免BEAST。(唉,没有EDH RC4这样的东西,所以没有EECDH,您就放弃PFS)。我相信,这是在Apache2.2上使用这些浏览器所能达到的最好效果。Chrome是唯一一个服务不好的浏览器,因为它支持TLSv1.1,并且可以使用EDH AES而不会受到BEAST的攻击。相反,它得到了类似Firefox和IE的RC4-RSA。升级Apache以启用EECDH RC4应该得到Firefox、IE和Chrome的PFS

更新2013-11-09:

我在网上找到了一些替代建议。他们不太强调野兽的保护(也许是明智的,野兽才是),而更强调完美的前沿保密。在不同程度上,他们对GCM有更强烈的偏好,更不愿意接受RC4

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

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

Ivan Ristic和Geoffroy Grazem的建议中值得注意的是SSLv3被禁用。我认为这主要是破坏了IE6,尽管SSLv3和TLSV1.0之间的一些安全相关的差异是显而易见的

之前我也没有谈论和。要防止犯罪,请禁用SSL压缩。这包括在链接的示例中。为了防止破坏,您需要在HTTP级别禁用压缩。对于Apache 2.4,只需全局执行一次:

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

SetEnvIfExpr“%{HTTPS}==”on'”无gzip
对于较旧版本的Apache,请将其放置在SSLEngine所在的每个VirtualHost中:

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

SetEnv no gzip
更新2014-10-14:
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
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)" 
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
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite EECDH+AESGCM:AES256+EECDH:DES-CBC3-SHA