现在是 2015 年,在高安全性 HTTPS 环境中应该使用哪些 SSL/TLS 密码套件?

信息安全 tls 密码学
2021-09-03 02:08:00

配置维护“理想传输层”的 HTTPS 服务变得相当困难。应该如何配置 HTTPS 服务以允许某种合理级别的兼容性,同时又不易受到轻微的攻击?

结合Beast、Crime、Breach 和 Poodle的TLS 降级攻击即使不是全部 SSLv3 和更早版本,也能击倒大部分。Microsoft 默认禁用 SSLv3,这对我来说听起来不错。由于RC4、MD5 和 SHA1 的弱点,可供选择的密码套件更少。

一个“理想”的 HTTPS 服务是否只能启用 TLS 1.0、1.1 和 1.2,并且密钥大小变体遵循密码?最喜欢的密​​码套件应该是什么?

TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_DH_RSA_WITH_AES_128_GCM_SHA256
4个回答

一个“理想”的 HTTPS 服务是否只能启用 TLS 1.0、1.1 和 1.2,并且密钥大小变体遵循密码?

不,“理想”的 HTTPS 服务将仅启用 TLS 1.2 并仅启用基于 AEAD(带有关联数据的身份验证加密)的密码套件,该密码套件具有 SHA-2、4096 位 DH 参数和 521 位 EC 曲线,其类型符合您的要求(政府批准或不是政府产生的)。

所述服务也将无法被各种旧客户端使用,包括 Android 4.3 及更早版本、IE 10 及更早版本、Java 7(至少 u25 及更早版本)、OpenSSL 0.9.8y 及更早版本(OpenSSL 1.0.0)。 0 根本没有在我的来源中列出),依此类推。但是,它不会受到任何仅适用于 TLS 1.1 及更低版本的攻击、任何依赖 SHA-1 的攻击以及任何依赖 CBC 模式或过时密码(如 RC4)的攻击。

每个https://www.ssllabs.com的客户端密码套件限制

最喜欢的密​​码套件应该是什么?

这取决于!

我认为前向保密是一项要求。

我认为“目前被认为是相当安全的”是一项要求。

我认为“至少由一个主要参与者实际实施”是一项要求。

所有关于必须有/不能使用某些或另一个密码子集的要求(必须使用 X,不能使用 Y 等)。

因此,我建议以下列表作为一个合理的开始。从顶级类别(TLS 1.2 AEAD)开始,然后继续向下列表并添加类别,直到您达到适合您的用户群的级别或您已经到达舒适区的尽头,以先到者为准。

尽可能多地包含每个类别的密码套件,以便在下一次攻击发生时,您将能够删除受影响的密码套件并继续其余的密码套件。

密切关注威胁环境,以便您可以继续删除存在漏洞的密码套件。

在每个主要类别中,请根据您的喜好订购或剔除密码套件:DHE 当然比 ECDHE 慢,但完全去掉了椭圆曲线的出处,依此类推。此时,排序似乎是一种权衡,但如果您想要速度,更喜欢甚至需要 TLS_ECDHE_*。如果您不信任当前普遍实施的椭圆曲线,或者由于 2015 年 8 月的 NSA Suite B 指南而担心椭圆曲线,这表明在不久的将来将远离之前的 Suite B 椭圆曲线,并且愿意刻录 CPU,更喜欢甚至需要 TLS_DHE_* 套件。

请记住,“普通”证书是 RSA 证书,可与 TLS_ECDHE_RSA_* 和 TLS_DHE_RSA_* 密码套件一起使用。到目前为止,与 TLS_ECDHE_ECDSA_* 密码套件一起使用的 DSA 证书非常罕见,而且许多 CA 不提供它们。

  • 仅 TLS 1.2 AEAD(也都是 SHA-2)
    • TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256(新 0xcca9,RFC7905 前 0xcc14)
    • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256(新 0xcca8,RFC7905 前 0xcc13)
    • TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256(新 0xccaa,RFC7905 前 0xcc15)
    • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
    • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
      • 对于对 NIST 合规性感兴趣的美国人,这是一个 TLS 1.2应该分类密码套件,用于根据NIST SP800-52 修订版 1表 3-3使用 RSA 私钥和 RSA 证书的服务器
    • TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f)
    • TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e)
    • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)
      • 对于对 NIST 合规性感兴趣的美国人,这是一个 TLS 1.2应该分类的密码套件,适用于使用椭圆曲线私钥和 ECDSA 证书的服务器,每个NIST SP800-52 修订版 1表 3-5
    • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
      • 对于对 NIST 合规性感兴趣的美国人,这是一个 TLS 1.2应该分类的密码套件,适用于使用椭圆曲线私钥和 ECDSA 证书的服务器,每个NIST SP800-52 修订版 1表 3-5
    • 这些是我目前在常见 TLS 实现中所知道的最高级别的安全性。
    • 截至 2017 年 1 月,主要的现代浏览器都处理这个级别,包括但不限于支持 AES-GCM 的 6.0 的 Android 和 - 仅主要的 - 旧值 CHACHA20-POLY1305 和支持新 CHACHA20-POLY1305 的 7.0,Chrome 与 AES -GCM 和 CHACHA20-POLY1305,Firefox 带有 AES-GCM 和 CHACHA20-POLY1305,IE 和 Edge 仅带有 AES-GCM,Java 仅带有 AES-GCM,OpenSSL 1.1.0 带有 AES-GCM 和 CHACHA20-POLY1305,Safari 带有仅 AES-GCM)。
    • 许多主流浏览器都无法处理这个问题,即使是 2015 年的老式浏览器(OSX 10.9 上的 Safari 7、Android 4.3 及更早版本,Win7 上的 IE 10(如果 Windows 已修补,IE 11 即使在 Win7 上也将支持 0x9f 和 0x9e)
  • TLS 1.2 SHA2 系列(非 AEAD)
    • TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x6b)
    • TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x67)
    • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028)
    • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)
      • 对于对 NIST 合规性感兴趣的美国人,这是一个 TLS 1.2应该分类密码套件,用于根据NIST SP800-52 修订版 1表 3-3使用 RSA 私钥和 RSA 证书的服务器
    • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (0xc024)
    • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (0xc023)
      • 对于对 NIST 合规性感兴趣的美国人,这是一个 TLS 1.2应该分类的密码套件,适用于使用椭圆曲线私钥和 ECDSA 证书的服务器,每个NIST SP800-52 修订版 1表 3-5
    • TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 (0xc077)
    • TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 (0xc076)
    • TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 (0xc4)
    • 请注意,您已经失去了 AEAD 模式并且正在使用更旧的 CBC 模式;这不太理想。CBC 模式是过去多次攻击的促成因素,包括 Lucky 13 和 BEAST,相信 CBC 模式也可能与未来的漏洞有关并不是没有道理的。
    • 一些没有任何 AEAD 密码套件的现代浏览器确实有一个更适合这一类别的浏览器,例如,Win7 上的 IE 11 可以使用 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 而 Safari 6 和 7 可以使用其中的一些
      • 再次,这是如果您没有 ECDHE_ECDSA GCM 套件工作)
  • 具有现代密码的 TLS 1.0 和 1.1(以及过时的哈希,因为这就是所有可用的)
    • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
      • 对于对 NIST 合规性感兴趣的美国人,这是一个使用 RSA 私钥和 RSA 证书的服务器的可能类别密码套件,每个NIST SP800-52 修订版 1表 3-2
    • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
      • 对于对 NIST 合规性感兴趣的美国人士,这是一个适用于使用 RSA 私钥和 RSA 证书的服务器的应分类密码套件,符合NIST SP800-52 修订版 1表 3-2
    • TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39)
    • TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33)
    • TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (0x88)
    • TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (0x45)
    • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
    • 一旦你包含了这个级别的密码套件,你很可能会找到适用于几乎所有现代实现的东西。
    • 在这个级别,您不仅使用 CBC 模式,还使用 ​​SHA-1。NIST SP800-131A建议在 2013 年 12 月 31 日之后(实际上是一年前的今天)禁止 SHA-1 用于数字签名生成。
  • TLS 1.0 和 1.1 具有较旧但仍然合理的密码和过时的哈希
    • TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (0x16)
    • TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (0xc012)
      • 对于对 NIST 合规性感兴趣的美国人士,这是一个适用于使用 RSA 私钥和 RSA 证书的服务器的应分类密码套件,符合NIST SP800-52 修订版 1表 3-2
    • TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA (0xc008)
      • 对于对 NIST 合规性感兴趣的美国人,这是一个适用于使用椭圆曲线私钥和 ECDSA 证书的服务器的应该类别密码套件,每个NIST SP800-52 修订版 1表 3-4
    • Windows XP 上的 IE 8 仍然不走运,由于 DH 参数最大值,Java 6u45 也是如此。
    • 这绝对是我推荐的最低水平。
  • 请注意,对于使用 RSA 私钥和需要NIST SP800-52 第 1 版合规性的 RSA 证书的服务器,您应该应该并且可能实施不提供前向保密的特定其他 TLS_RSA_* 密码套件,因此我不推荐,除非这合规是必需的。
    • 另请注意,该文档的第 3.3.1 段具体说明了“服务器配置为仅使用完全由批准的算法组成的密码套件。本节提供了可接受的通用密码套件的完整列表......”
  • 当然,其他国家和行业要求会有所不同。
    • 并且可能相互冲突;仔细阅读所有适用于您的内容。

我将在此处插入常用插件 - 使用您自己的工具尝试您的密码列表(openssl ciphers -v '...' 对于基于 openssl 的系统),请访问https://www.ssllabs.com/index.html首先检查各种客户端支持的密码套件,然后设置您的站点,然后返回 www.ssllabs.com 并运行他们的服务器测试。

请注意,_ECDSA_密码套件当然需要 ECDSA 证书,而且这些证书仍然很难找到。

ETA:NSA Suite B EC 建议,IE 11/Win7 现在支持 0x9f 和 0x9e。

ETA:截至 2016 年 1 月,NIST SP800-52r1 保持不变,并且已将一个新密码套件 (0xc00a) 添加到列表中。

ETA:截至 2017 年 1 月,RFC7905 已更改三个 TLS 1.2 AEAD CHACHA20-POLY1305 密码,并且“现代”浏览器已大大改进了 AEAD 支持,如新项目符号中所述。 有关最新的 IANA 密码套件,请参阅https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4 。

我通常不会只用一个链接来回答,但由于这个问题的答案经常发生变化,所以我这样做了。此外,“理想的”密码套件完全取决于应用程序和目标受众。您可以控制哪些,您可以做出哪些选择并且您可以负担得起(例如,您需要支持 IE6 吗?),这些都会影响“理想”的答案。

无论如何,https ://cipherli.st/ 对流行应用程序的密码套件和配置示例进行了很好的总结。正如其他人所指出的,Qualys SSLLabs有一个很好的工具来测试你的配置并且有一些很好的解释。

一个很好的起点是Mozilla 推荐的 TLS 密码

测试公共 HTTPS 网站安全性的一个好方法是Qualys SSL Labs,该站点还包含许多关于 TLS/SSL 的文章(重点关注 HTTPS)。

通过 SSL Labs 更新 2016:

您应该主要依赖提供强身份验证和密钥交换、前向保密和至少 128 位加密的 AEAD 套件。其他一些较弱的套件可能仍受支持,前提是它们仅与不支持更好的旧客户端协商。

有几个必须避免的过时加密原语:

匿名 Diffie-Hellman (ADH) 套件不提供身份验证。

  • NULL 密码套件不提供加密。
  • 导出密码套件在连接中协商时是不安全的,但它们也可以用于更喜欢更强大套件的服务器(FREAK 攻击)。
  • 具有弱密码(通常为 40 位和 56 位)的套件使用很容易被破解的加密。
  • RC4 不安全。
  • 3DES 又慢又弱。

使用以下为 RSA 和 ECDSA 密钥设计的套件配置作为您的起点:

ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES128-SHA
ECDHE-ECDSA-AES256-SHA
ECDHE-ECDSA-AES128-SHA256
ECDHE-ECDSA-AES256-SHA384
ECDHE-RSA- AES128-GCM-SHA256
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES128-SHA
ECDHE-RSA-AES256-SHA
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES256-SHA384
DHE-RSA-AES128-GCM- SHA256
DHE-RSA-AES256-GCM-SHA384
DHE-RSA-AES128-SHA
DHE-RSA-AES256-SHA
DHE-RSA-AES128-SHA256
DHE-RSA-AES256-SHA256
EDH-RSA-DES-CBC3-SHA

注意 此示例配置使用 OpenSSL 所需的非标准套件名称。对于在其他环境(例如 IIS)中的部署,您需要使用标准的 TLS 套件名称。

参考:https ://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices#23-use-secure-cipher-suites