什么是密码套件
密码套件是通过传输层安全性 (TLS)(通常仍称为安全套接字层 (SSL))实现安全网络连接的指令集。在后台,这些密码套件提供了一组确保客户端和服务器之间通信安全所需的算法和协议。
要启动 HTTPS 连接,双方(Web 服务器和客户端)需要执行 SSL 握手。握手过程相当复杂,在此期间双方需要就共同的密码套件达成一致。然后使用该密码套件协商安全的 HTTPS 连接。
为什么需要密码套件?
正如我们之前所说,SSL 握手是一个复杂的过程,因为它利用各种加密函数来实现 HTTPS 连接。在握手过程中,客户端和 Web 服务器将使用:
· 密钥交换算法, 用于确定如何交换对称密钥
· 身份 验证或数字签名算法,规定如何实施服务器身份验证和客户端身份验证(如果需要)
· 批量 加密密码,用于加密数据
· 哈希 /MAC 函数,决定如何进行数据完整性检
这些密码在连接的各个点都需要执行身份验证、密钥生成和交换以及校验以确保完整性。要确定要使用哪些特定算法,客户端和 Web 服务器首先要共同决定要使用的密码套件。
由于服务器、操作系统和浏览器的多样性,密码套件必不可少。需要一种方法来适应所有这些组合,因此密码套件可以确保兼容性。
在连接握手期间,当客户端和服务器交换信息时,Web 服务器和浏览器会比较它们支持的密码套件的优先列表,查看它们是否兼容,并确定使用哪个密码套件。
使用哪种密码套件取决于 Web 服务器。约定的密码套件是以下项的组合:
l 密钥交换算法,例如 RSA、DH、ECDH、DHE、ECDHE 或 PSK
l 身份验证/数字签名算法,例如 RSA、ECDSA 或 DSA
l 批量加密算法,例如 AES、CHACHA20、Camellia 或 ARIA
l 消息认证码算法,例如 SHA-256 和 POLY1305
回到我们的密码套件范例,让我们看看密码套件提供什么信息。
从左到右,ECDHE 确定在握手期间将通过临时椭圆曲线 Diffie Hellman (ECDHE) 交换密钥。ECDSA 或椭圆曲线数字签名算法是身份验证算法。AES128-GCM 是批量加密算法:AES 运行 Galois 计数器模式,密钥大小为 128 位。最后,SHA-256 是哈希算法。
为什么密码套件很重要?
密码套件对于确保 HTTPS 连接的安全性、兼容性和性能非常重要。就像食谱描述了制作完美食谱所需的原料一样,密码套件规定了使用哪些算法来建立安全可靠的连接。
正如我们之前提到的,最终由 Web 服务器决定使用哪种密码套件。因此,Web 服务器上的密码套件优先级列表非常重要。选择在任何 Web 服务器上列出的正确密码对于任何管理员来说都是一项至关重要的工作,并且它很大程度上取决于连接到服务器的用户类型和他们使用的技术。
用户还有责任确保安全连接。由于浏览器供应商在发现漏洞后会更新其支持的密码套件列表,因此用户必须安装新的浏览器补丁,以降低在服务器端弃用弱密码套件时遇到兼容性问题的可能性。
TLS 1.2 中支持的密码套件
在讨论有多少种不同的密码套件之前,让我们记住,TLS 1.2 之前的所有 TLS 协议(即 TLS 1.0 和 TLS 1.1)由于各种安全原因已被弃用。目前,可接受的 TLS 协议是 TLS 1.2 和 TLS 1.3。
从 TLS 1.2 开始,该协议支持 37 种不同的密码套件。如果这个数字看起来很大,想象一下 TLS 1.2 已经存在了近十年,在此期间出现了许多不同的系统。再加上每个密码套件由四种不同的算法组成,最终你会得到多达 40 种不同的密码组合。
在 TLS 1.2 中支持的所有密码套件中,建议我们使用具有临时 Diffie-Hellman 算法的密码套件。因此,建议的密码套件如下:
l TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
l TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
l TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
l TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
l TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
l TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
l TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
l TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
l TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
l TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
l TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
l TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
l TLS_DHE_RSA_WITH_AES_128_CBC_SHA
l TLS_DHE_RSA_WITH_AES_256_CBC_SHA
l TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
l TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
l TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
l TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
l TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
l TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
识别弱密码
随着 TLS 1.3 的推出,许多方面都发生了变化,以提高协议的安全性。首先,旧的、不安全的密码已被弃用,包括:
l TLS_AES_256_GCM_SHA384
l TLS_CHACHA20_POLY1305_SHA25
l TLS_AES_128_GCM_SHA256
l TLS_AES_128_CCM_8_SHA256
l TLS_AES_128_CCM_SHA256
支持 TLS 1.3 中的密码套件
此外,TLS 1.3 密码套件现在比相应的 TLS 1.2 套件短得多。密码套件不列出证书类型(RSA 或 ECDSA)和密钥交换机制(DHE 或 ECDHE)。因此,确定加密参数所需的协商次数从四个减少到两个。TLS 1.3 中的密码套件如下所示:
客户端在知道密钥交换过程将使用临时 Diffie-Hellman 算法的情况下发起握手,并且可以在客户端问候消息期间发送其密钥共享部分。这样做的好处是,TLS 1.3 握手缩短为一次往返,服务器会响应所有必要的信息,以便双方派生会话密钥并开始安全通信。
TLS 1.3 中支持的密码套件现已减少到仅五个,如下所示:
l TLS_AES_256_GCM_SHA384
l TLS_CHACHA20_POLY1305_SHA256
l TLS_AES_128_GCM_SHA256
l TLS_AES_128_CCM_8_SHA256
l TLS_AES_128_CCM_SHA256
选择密码套件
TLS 1.3 密码套件与旧版 TLS 不兼容,因为它们的结构不同。这意味着网站管理员需要以某种方式配置他们的 Web 服务器,以兼容受支持的密码套件的两个版本,即 TLS 1.2 和 TLS 1.3。选择仅支持 TLS 1.3 并不是一个明智的解决方案,因为许多公司仍然依赖 TLS 1.2。
Mozilla为使用 TLS 协议的 Web 服务器推荐三种不同的密码套件配置。
l 现代: 此配置适用于支持 TLS 1.3 的现代客户端,无需向后兼容。现代配置提供极高级别的安全性。
l 中级: 这是通用服务器的推荐配置,不需要与旧版客户端(例如 Windows XP 或旧版 OpenSSL)兼容。它非常安全,并且与过去五年(或更长时间)发布的几乎所有客户端兼容。
l 旧版: 由非常旧的客户端或库访问的服务,例如 Internet Explorer 8(Windows XP)、Java 6 或 OpenSSL 0.9.8,应作为最后的手段使用。
结论
密码套件是 SSL/TLS 握手期间使用的密码组合,用于确定 HTTPS 连接的安全设置。在 Web 服务器和客户端中选择和维护适当的密码套件对于确保 HTTPS 通信的安全性、性能和兼容性非常重要。
维护受支持的密码套件是证书生命周期管理的一项重要功能,可确保您的证书符合行业实践。全面了解 IT 环境中的所有证书和连接是至关重要的第一步,其次是持续监控、自动续订和配置。