我有一个 Apache 2.4.7 Web 服务器,使用单个 IP 地址运行多个域名。由于 Poodle 漏洞,我添加了以下SSLCipherSuite
行。一段时间内它运行良好,但用户报告在 Firefox 中访问页面时出现问题。不幸的是,要求用户切换浏览器不是一个选项,所以我需要更改设置以支持 TLS 1.0、1.1 和 1.2。
当前设置为:
<VirtualHost ZYX.XYZ.org:443>
DocumentRoot /var/www/ZYX.XYZ/www
ServerName ZYX.XYZ.org
<Directory "/var/www/ZYX.XYZ/">
allow from all
Options -Indexes
</Directory>
SSLEngine on
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-SSLv3:-EXP:!kEDH
SSLCertificateFile /etc/apache2/ssl/XYZ.org.crt
SSLCertificateKeyFile /etc/apache2/ssl/XYZ.org.key
SSLCACertificateFile /etc/apache2/ssl/gd_bundle-g2-g1.crt
</VirtualHost>
如果我们看看Qualys 测试,我们看到服务器仅支持 TLS 1.2。
启用 TLS 1.0、TLS 1.1 和 TLS 1.2 的适当设置是什么,以便网站可以支持旧版浏览器,并保持良好的安全级别?
答案1
根据 SSLLabs 的说法,以下配置是(或曾经是)最佳配置:
SSLProtocol +TLSv1.2 +TLSv1.1 +TLSv1
SSLCompression off
SSLHonorCipherOrder on
SSLCipherSuite "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA"
但是,它将排除所有较旧的浏览器(包括 Opera Mini!),因为它缺少非 PFS 和 RC4 密码套件。您可以附加以下内容(当然是在结束的引号之前)以启用 RC4,包括回退(最后一项)到 RC4没有预应力混凝土 (PFS)
:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:RC4-SHA
您应该鼓励用户尽快升级。RC4 已损坏,不应再使用,尤其是在没有 PFS 的情况下。
为了获得更好的成绩,还要发送 HSTS 标头(要使此功能正常工作,您需要启用mod_header
):
Header always set Strict-Transport-Security "max-age=63072000;"
此配置不适用于 Apache <2.2.26,因为它不支持椭圆曲线加密。
更新:
刚刚检查过,它仍然适用于 A+。:) 不过,我相信这需要带有 SHA256 的证书。
2015 年 10 月更新:
我最近发现另一个 SSL 配置生成器,由 Mozilla 提供。它对密码进行排序,以便 Chrome 不会提示您正在使用已弃用的密码套件。
答案2
我发现这个建议密码列表:
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)"
答案3
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-SSLv3:-EXP:!kEDH
^^^^^^^^
禁用 SSLv3 密码套件会禁用 SSL3.0 引入的所有密码套件。由于这些密码套件也用于更高版本的 SSL(TLS1.0+),而新密码套件大多是随 TLS1.2 引入的,因此此设置会使 TLS1.0 和 TLS1.1 不可用,因为没有共享密码。因此,协议实际上被限制为 TLS1.2。
openssl ciphers -V <cipher>
如果您使用密码字符串调用,您会发现所有可用的密码都需要 TLS1.2。
例如:openssl ciphers -V TLSv1.2
。
答案4
请参阅 SSLOpenSSLConfCmd 指令Apache 2.4 配置。
SSLOpenSSLConfCmd Protocol "-ALL, TLSv1.2"