谁负责选择 TLS 密码套件 - 客户端或服务器?

信息安全 tls
2021-08-30 11:54:14

如果客户端提供了更高的密码套件,ClientHello但最终在同一协议版本中协商了更低强度的密码套件,尽管客户端和服务器都可以使用更高的密码套件,谁负责?

根据SSL/TLS 如何工作?ServerHello最终决定了密码套件。

从那个帖子:

要记住:客户端建议但服务器选择。密码套件在服务器手中。礼貌的服务器应该遵循客户端的偏好(如果可能的话),但他们可以不这样做,有些实际上会这样做(例如,作为对 BEAST 的保护的一部分)。

为了更好地理解这个问题,下面提供了一个示例。

火狐浏览器示例:

有一个客户端(A)和一个服务器(B)。

客户端 (A) 是 Firefox 65 版浏览器。

服务器 (B) 是通过 https 为站点提供服务的 Web 服务器。

行为:

与服务器 (B) @ site.server.com 的连接正在从更强大的 TLS 1.2 密码套件协商到不太强大的 TLS 1.2 密码套件,即使客户端和服务器上都有更强大的密码套件。此行为在 Firefox 65 上得到确认。

重现步骤:

  1. 在 Firefox 中禁用TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256和所有其他较弱的密码套件,然后重新加载 site.server.com 该站点将加载TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384.

  2. 在启用的TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256同时TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384启用,然后重新加载 site.server.com。

将选择较弱的密码套件。

在这种情况下,谁负责?ClientHello或者ServerHello

3个回答

客户端仅按照他们的偏好顺序发送它支持的密码。然后服务器选择这些密码之一——这意味着只有服务器最终决定使用哪个密码

从提供的密码套件中选择哪个密码套件完全取决于服务器,即服务器可能会考虑客户端偏好,但也可能完全忽略它。事实上,许多服务器都有一个配置选项,允许服务器使用客户端首选的密码或服务器首选的密码。

服务器选择密码套件的原因是基于服务器证书的身份验证算法。而对于较弱的密码套件选择,有时服务器有一些属性比客户端更喜欢服务器密码顺序。例如 tomcat 中的“ useServerCipherSuitesOrder ”强制服务器密码套件顺序。

服务器应该尊重客户端的密码套件首选项引用 TLS 1.2 RFC 5246

在 ClientHello 消息中从客户端传递到服务器的密码套件列表包含客户端支持的密码算法的组合,这些组合按客户端的偏好排列(最喜欢的选择在前)。...服务器将选择一个密码套件,或者,如果没有提供可接受的选择,则返回握手失败警报并关闭连接。

所以最终由服务器决定参见例如 Apache httpdmod_ssl指令,其中

如果启用,将使用服务器的首选项。

如有疑问,我建议记录握手 (pcap) 并检查问候消息。