为什么客户端提供使用 SSL 2.0 协议的握手

信息安全 tls
2021-08-24 22:06:45

根据这本书,Data Center Fundamentals,第 369 页,在 Netscape 2.x 和 Internet Explorer 3.x 中添加了 SSLv3 支持,在 Netscape 4.x 和 Internet Explorer 4.x 中添加了 TLS。

我正在我公司监听路由器(我有 200mb pcap 文件,只有 https 连接),这些旧客户端在公司计算机中不存在,但我观察到一些客户端 hello 请求采用 SSLv2 格式。因此,客户端以 SSLv2 格式发送客户端问候的唯一原因似乎与不支持新版本 ssl 的服务器兼容。这个兼容性问题在https://www.rfc-editor.org/rfc/rfc5246#appendix-E.2中说明。

我无法理解客户端何时在 v2 中发送“client hello”以实现兼容性。例如,客户端如何决定它应该发送 v2 客户端问候或者它如何决定它应该发送 v3.1?

1个回答

客户端ClientHello在准备好使用 SSLv2 时发送 SSLv2,假设服务器可能是仅 SSLv2 的服务器。在实践中,给定的客户端将始终发送 SSLv2 ClientHello,或者从不发送:客户端在实际与特定服务器通信之前无法知道特定服务器支持什么,因此它是一个全有或全无的配置选项。

现代浏览器具有“从不”的说服力;有些根本不支持 SSLv2(SSLv2 已正式弃用;它的支持已从OpenSSL中删除,因此使用 Apache+OpenSSL 的 Web 服务器很快就会支持它)。但较旧的浏览器版本可以使用 SSLv2,有些ClientHello 默认发送 SSLv2 (我认为 IE 6.0 做到了)。

请注意,服务器可以理解 SSLv2ClientHello格式,但仍然不支持 SSLv2(即,服务器ClientHello仅在内部声明客户端也知道 SSL 3.0 或 TLS 时才接受)。

由于 SSLv2ClientHello格式与诸如服务器名称指示之类的扩展不兼容(该格式没有扩展空间),并且由于客户端发送这样的格式没有意义,ClientHello除非它准备好在 SSLv2 中实际进行完全连接,我们可以假设 SSLv2ClientHello功能将来会消失……但我们还没有。