浏览器如何协商 SSL/TLS 连接参数?

信息安全 加密 tls 网页浏览器 密码选择
2021-08-14 05:43:36

对于这个问题,假设 SSL/TLS 连接有 4 个参数:

  • protocol,
  • symmetric encryption method,
  • asymmetric encryption method,
  • MAC.

在 SSL 参数的协商过程中,浏览器会尝试获得可能的最佳参数所以,我的问题是:

  1. 上一个列表的正确顺序是什么我知道所有这些都很重要(需要)。但我假设在代码中选择其中一个作为第一个,然后是第二个、第三个和第四个。我相信选择带有 DES 的 TLSv1.2 比带有 AES256 的 SSLv3 更安全。所以问题是它是如何在浏览器中实现的。
  2. 浏览器将这些信息存储在哪里以及是否可以由用户更改?

我知道可能有几个依赖于浏览器的答案,但也许有一些由 SSL/TLS 协议强制执行的一般规则。

3个回答

在 SSL 中,密钥交换、对称加密和 MAC 算法都被组合成一个单一的聚合概念,称为密码套件

在初始握手中,客户端发送:

  • 它支持的最高协议版本;
  • 它支持的密码套件列表,按优先顺序排列;
  • 其他与这里无关的东西。

然后服务器选择将使用的协议版本和密码套件。理论上讲,礼貌的服务器会选择客户端和服务器都支持的最高协议版本,并通过选择客户端列表中服务器也支持的第一个密码套件来尊重客户端的偏好。现有的服务器并不都是礼貌的。

请注意,协议版本并非完全独立于密码套件:一些密码套件仅适用于某些协议版本(例如,使用 AES/GCM 作为加密+MAC 的密码套件仅适用于 TLS 1.2)。

在任何情况下,都没有对密钥交换、对称加密和 MAC 进行独立选择:协议在这方面不是正交的。并非所有组合都有意义;并非所有有意义的组合都被实际定义,即具有分配的密码套件标识符

有关此过程的更多信息,您可以从阅读此答案开始。


浏览器在它们支持的密码套件和发送它们的顺序方面或多或少是可配置的。通常您可以激活或停用密码套件(例如,请参阅),但顺序受浏览器逻辑的控制(可能会根据版本而变化)。在任何情况下,最终选择的是服务器,而不是客户端(当然,客户端总是可以通过发送限制为该单个密码套件的列表来强制使用特定的密码套件)。

可以说,“优先顺序”的概念没有什么意义。在实践中,客户端发送一个它愿意使用的密码套件列表,因此它们中的任何一个都是可用的。如果密码套件“弱”,则客户端不应将其放在其偏好列表中,以便服务器希望不会选择它;相反,客户端根本不应该包含它。弱就是弱。

@ThomasPornin 的回答解决了您的第一个问题。那么,您的第二个问题是“如何在浏览器中配置协议和密码套件?”

火狐

通过修改about:config 变量 security.tls.version.min 和 security.tls.version.max来配置协议。您可以将最小值和最大值设置为:

  • 0:SSL 3.0 是最低要求/最高支持的加密协议。
  • 1:TLS 1.0 是最低要求/最高支持的加密协议。
  • 2:TLS 1.1 是最低要求/最高支持的加密协议。
  • 3:TLS 1.2 是最低要求/最高支持的加密协议。

Firefox 提供的密码套件列表由 about:config 变量 security.ssl3.(cipher suite) 控制。您无法使用此界面控制订单,但我不会担心;客户端上的顺序只是一个“偏好”,它是支配密码选择的服务器顺序。在名称中使用“ssl3”并不意味着它只影响 ssl3;它会影响所有 SSL3 或 TLS* 版本可以提供的密码套件。

在此处输入图像描述

您不能简单地添加带有密码名称的密钥;密码必须由软件支持,新版本的 Firefox 支持改进的密码套件库,因为旧的、不安全的套件被淘汰并添加了新的套件。

我已经读过可以编译添加新的自定义密码套件所需的库,但我现在找不到该参考资料,我不建议将其作为一般规则。


铬合金

使用 --ssl-version-min 命令行开关配置协议。例如,要禁用 SSLv3:

--ssl-version-min=tls1

密码套件列表可以使用--cipher-suite-blacklist 命令行开关从默认值减少,引用IANA TLS 密码套件注册表中的值。

--cipher-suite-blacklist=0x0005,0x0004

这里有一个很好的讨论,涉及不同的浏览器如何使他们的密码套件可访问,尤其是他们如何不竭尽全力使其变得容易或成为可能。

客户端(浏览器)和服务器都支持一组密码套件。

浏览器将它的列表发送到服务器,然后服务器从它的(排序的)列表中选择它们都支持的东西。

这 4 个参数不是独立选择的。所有 4 个都属于一个密码套件。

您可以在此处查看您的浏览器支持的密码套件向下滚动到“密码套件(按优先顺序)”。

您可以在此处查看给定服务器的列表