“最佳”Web 服务器 SSL 密码套件配置

信息安全 tls 网络服务器 密码选择
2021-09-07 06:46:57

在过去几年中,被认为是最佳 SSL 密码套件配置的内容发生了许多变化(例如 BEAST 和 CRIME 攻击,RC4​​ 中的弱点)

我的问题是,目前被认为具有以下目标的最佳 SSL 密码套件集。

  • 尽可能提供最安全的连接,包括尽可能完善的前向安全性和避免已知弱点。
  • 提供与各种常用客户端的兼容性,包括移动设备(例如 Android、iOS、Windows Phone)和桌面操作系统(包括 Windows XP/IE6)
4个回答

最安全的设置不仅取决于密码,还取决于使用的 tls 版本。对于 openssl,首选 tls 1.1/1.2。BEAST 和 CRIME 是对客户端的攻击,通常在客户端进行缓解,但也有服务器端的缓解:

对于完美的设置:SSL 总是会在较高水平上影响性能,RC4 和其他快速密码套件可能仍然适用于静态内容,尤其是。从您自己的 CDN 提供时。

理解 OpenSSL 的一个很好的指南是OpenSSL Cookbook,其中还详细解释了PFS、cipher-suites、tls-version 等。pp. 有 2 篇博文解释了 PFS 和实际设置:

cipher-suites-suggestions 在旧客户端上启用 PFS:

# apache
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+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"

# nginx

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";

有关详细的 nginx/ssl 手册,我想指导您阅读 Nginx + SSL + SPDY 指南

自撰写此答案以来的一年中,Mozilla 的指南已定期更新。我在下面的所有保留都已考虑在内,我全心全意地推荐该指南。


我建议您阅读Mozilla 的服务器端 TLS指南。它是全面的,他们特别注意与旧客户端的兼容性,有时会损害安全性。(毕竟,IE 6 用户应该能够下载 Firefox。)我想强调几点:

  • 支持Windows XP/IE 6不是最佳选择。如果可能的话,我建议你放弃它。它需要 SSL 3.0,这使得体面的客户端容易受到降级攻击。编辑:Anti-weakpasswords 在上面的评论中报告 IE 6可以支持 TLS 1.0。不过,我不知道有多少百分比的 IE 6 客户端支持或启用它。

  • 支持XP/IE 8也不错。它支持 TLS 1.0,尽管它最好的密码套件是DES-CBC3-SHA并且它不支持完美的前向保密或 SNI。(它的第二好的密码套件是RC4-SHARC4-MD5。3DES 非常慢,但是 RC4 存在安全问题。如果可能,请避免使用它。)

  • 从安全角度来看,2048 位 Diffie-Hellman 参数是最好的,但 Java 6 仅支持 1024 位参数。常见的 1024 位参数可能会或可能不会被 NSA 超级计算机破解,但目前 1024 位 DH 或多或少是安全的。您可能需要使用它。(Java 7 支持 ECDHE,绕过了 DHE 参数大小的整个问题。)

Mozilla 的主要密码套件列表包括 RC4。如上所述,我推荐使用 3DES的RC4 弱点部分的列表。

Mozilla 的配置示例启用 SSL 3.0。正如我所说,我不鼓励这样做。

Mozilla 的配置示例主要推荐 2048 位 DH 参数,但他们也给出了 1024 作为选项。

当然,第一步是使 OpenSSL(或您使用的库)保持最新。

但是随着新漏洞的发现和浏览器的升级,这里的答案可能(将会)变得过时。我建议您依靠Mozilla SSL 配置生成器来检查您应该使用哪个配置。

在此处输入图像描述

您在网络服务器上配置的“最佳”SSL 密码取决于您的客户要求。在许多情况下,这将是选择协议和密码套件的一个因素。不确定您是否属于这种情况。

您可以配置可能的最佳安全性——仅支持 TLS 1.2 协议、仅具有完美前向安全性 (PFS) 的密码和仅 AES 256。在 PFS 中,您可能仅支持椭圆曲线变体 ECDHE。您可以选择较新的安全 GCM 密码,这些密码提供经过身份验证的加密并提供非常好的性能(使用 AES-NI 指令)。但是,如果您最重要的客户在 Windows 7 上使用 IE8,而您无法说服他们升级浏览器,那么他们将无法使用您的服务,您将失去一位客户。

ssllabs.com 提供网络服务来扫描您的网站并给出 A+、A、B 等评级。评级基于收到的 4 个参数的数字分数(最大 100)——证书、协议支持、密钥交换和密码强度. 如果支持完美前向保密 (PFS)、严格传输安全 (HSTS) 等,它们会给出更高的分数。

请注意,随着浏览器和服务器的修补、新漏洞的出现、新漏洞的发现等,分数可能会在一段时间内发生变化。早些时候,ssllabs 对未针对 BEAST 攻击实施服务器端缓解措施的站点给予较低的评分,但他们已经停止这样做,因为他们认为它在客户端得到了缓解(落后的 Apple 除外),但更重要的是因为缓解涉及强制执行 RC4(对于 TLS 1.0 或更低的协议),结果证明 RC4 比以前以为。

您可以访问ssl labs站点,输入您的 url 并获取分数。

SSL 实验室报告包括关于握手模拟的部分,其中显示了一堆客户端(浏览器、Java、openssl)以及哪些协议、密码套件、密钥大小将与您的服务器协商。如果无法协商,它将以红色显示“协议或密码套件不匹配”。您可以查找重要客户使用的配置的握手模拟。例如,您可能会看到条目

IE 8-10/Win7, TLS 1.0, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, FS 256

但是假设您收紧服务器的 ssl 配置以仅支持 TLS 1.2,那么该行将显示为

IE 8-10/Win7, Protocol or cipher suite mismatch, Fail

但是,随着您的客户迁移/更新/升级,您可以以仅 TLS 1.2、仅 PFS 和仅 256 位为目标来加强安全性

该报告提供的另一个重要信息是密码套件是否按服务器首选顺序排列。在前一种情况下,将遵守服务器配置中列出的密码顺序 --- 因此您将首选密码套件放在首位。将选择列表中服务器和客户端都可以使用的第一个密码。如果您使用 Apache,您可以使用指令“SSLHonorCipherOrder on”启用此功能。对于 nginx,指令是“ssl_prefer_server_ciphers on;”