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

警告:请仅从以下答案中使用Apacheconfiguration的build议。 要使用哪种密码 – 安全规范会随着时间而改变,下面的一些安全build议已经过期。

在最近发生的事件之后,我一直在重新考虑我的Apache设置。 目前,我的apache站点configuration看起来像这样:

<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完美的前向保密默认情况下? 我怎么能执行它?

怎么样:

 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缺乏基于协议版本configuration密码首选项的方法,因此我通过引用仅在较新协议中提供的密码来伪造它。 具体而言,AES仅在SHA1散列时才可用,直到TLSv1.2。 因此,列表以TLSv1.2短暂的Diffie-Hellman密码开始,然后是RC4(首先是短暂的DH,然后没有),最后是BEAST易受攻击的AES选项。 不包括authentication/弱encryption/弱散列最后只是为了保持良好的卫生,可以省略,因为没有这样的密码被引入。 如果性能问题,请仅使用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上的浏览器最好的select。 Chrome是唯一一个服务不佳的人,因为它支持TLSv1.1并且可以使用EDH AES而不易受到BEAST的攻击。 相反,它得到像Firefox和IE的RC4-RSA。 升级Apache以启用EECDH RC4应该为Firefox,IE和Chrome获得PFS。

更新2013-11-09:

我在网上发现了一些备用build议。 他们不太重视BEAST的保护(或许是明智的; BEAST现在大部分是减轻了客户端 ),更强调完美的前向保密。 在不同程度上,他们对GCM有更强烈的偏好,更不愿意接受RC4。

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

  • Mozilla OpSec
  • Ivan Ristic (Qualys的)
  • Geoffroy Gramaize

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

在Ivan Ristic和Geoffroy Gramaize的build议中值得注意的是SSLv3被禁用。 我认为这大多只是打破IE6,虽然SSLv3和TLS v1.0之间的一些安全相关的差异在维基百科上提及 。

之前我也没有谈过犯罪和违法 。 为了防止犯罪,请禁用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指南现在分为旧/中/现代兼容性的build议。 使用中间或现代设置,最终将禁用SSLv3。 这将防止POODLE攻击。

根据我自己的理解,您需要激活SSLHonorCipherOrder并使用来自openssl ciphers -v ECDHEDHE密码预先安装SSLCipherSuite 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 

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

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

在main / core conf指令中的httpd.conf中input密码:

 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上进行testing来检查它的安全状态。;

提供Perfect Forward Secrecy的密码套件是那些使用Diffie-Hellman密钥交换的临时forms的密码套件。 他们的缺点是他们的开销,可以通过使用椭圆曲线变体来改善(参见Vincent Bernat的博客) 。

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

在你的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)分裂logging技巧是在Firefox中实现的。 因此,您可以在高级configuration菜单中安全地禁用Firefox中的RC4。 为此,请在地址栏中input“about:config”,然后search“rc4”并将所有find的值切换为“false”。 如果遇到连接问题,请将这些参数切换回true。

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

本网站为您提供了有关SSLencryption套件的信息,您的浏览器支持保护HTTPS连接。

看看https://cipherli.st

在那里你可以find多个服务的复制和粘贴configuration代码片段,这应该确保强大的SSL安全设置。

本文将帮助您configuration前向安全性并使您了解最新的标准 – https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-正向保密;

截至2015年9月16日,这将会给你一个关于SSLLabstesting结果的答案。

 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 

我在Apache上使用ssl.confconfiguration,在SSLLab上获得了A级(2016年9月)的支持Windows XP / Internet Explorer 8的等级:

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

简而言之:只允许使用TLS :所有版本都支持兼容性,DES-CBC3-SHA密码也允许兼容。 第一个,首选的两个密码是使用椭圆曲线Diffie-Hellman ,最后一个被join作为后备,因为这是一个很好的选项之间可用的XP / IE的密码 。 如果你已经安装了最新的OpenSSL版本,那么在编写的时候,这个混合就足够了。

希望这是有帮助的。