【问题标题】:openssl s_client not offering the specified protocol version in handshakeopenssl s_client 未在握手中提供指定的协议版本
【发布时间】:2014-11-24 22:58:16
【问题描述】:

我的几台机器无法连接到 Internet 上的某些 HTTPS 服务器。为了调试这个,我开始学习 openssl s_client 和 TLS 1.2 协议,现在我在调试时感到困惑:

在我的一些机器上,如果我调用

openssl s_client -debug  -tls1_2 -connect admin.fedorahosted.org:443  

客户端以十六进制字节开始握手

16 03 03 ...

但在大多数机器上它以

开头
16 03 01 ...

前者表示协议为 TLS 1.2,后者表示协议为 TLS 1.0。前者听起来很合理,因为我在命令行上指定了该权限,但鉴于我已明确请求 TLS 1.2,第二个权限会发生对我来说似乎很奇怪。

我已经在所有测试过的 CentOS 机器上完成了yum update,因此它们名义上都处于同一级别的 openssl。

这里可能发生了什么?

【问题讨论】:

    标签: ssl openssl


    【解决方案1】:

    SSL/TLS 是“基于记录”的协议,每条记录在 5 字节标头中都有一个版本字段,这就是您在用于设置密码和协议版本的(未加密)握手记录中看到的内容.

    在握手交换中,协议版本和密码在“hello”记录中协商。 client hello 包含客户端支持的最高版本的字段,server hello(作为回复)包含最低共享版本。假设客户端和服务器支持连续的版本范围,如果它们不重叠,则会发送协议版本警报(此时客户端可能会使用不同的版本重试)。

    RFC 5246 Appendix E 详细说明了尝试连接和确定协议的预期逻辑。它还包含有关您可能观察到的问题的注释:

    注意:一些服务器实现已知实现版本 谈判不正确。例如,有错误的 TLS 1.0 当客户端提供一个简单的关闭连接的服务器 比 TLS 1.0 更新的版本。此外,众所周知,某些服务器会 如果包含任何 TLS 扩展,则拒绝连接 客户您好。与这种有缺陷的服务器的互操作性很复杂 超出本文档范围的主题,可能需要多个 客户端的连接尝试。

    很长一段时间以来,在第一个数据包(“client hello”)上看到 SSLv2.0 以最大限度地提高互操作性的情况并不少见,但现在你应该只在非常旧的软件上看到它(特别是因为不支持 @987654324 @,至少需要 TLSv1.0)。这个 Security.SE 问题还有更多背景知识:https://security.stackexchange.com/questions/34827/why-clients-offer-handshaking-with-ssl-2-0-protocol

    现在,至于为什么您在系统中看到不同的行为,如果没有 CentOS 和软件包版本,我无法判断。您可以使用openssl version -a 仔细检查您的 OpenSSL 版本,以查看是否存在补丁级别差异。 Red Hat(以及因此的 CentOS)包含大量 OpenSSL 补丁(除了删除各种专利算法外,还有大约 65 个补丁可以改变行为或向后移植补丁和特性)。 (官方)1.0.1a 的 CHANGES 描述了您所看到的,尽管我在这里猜测:

    *) Workarounds for some broken servers that "hang" if a client hello
    
       record length exceeds 255 bytes.
    
       1. Do not use record version number > TLS 1.0 in initial client
          hello: some (but not all) hanging servers will now work.
       2. [...]
    

    【讨论】:

    • 多么彻底的答案。现在所有机器的行为方式都相同,所以我无法进一步挖掘。如果我再次遇到这种情况,我会有这篇文章来指导我。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2015-11-12
    • 1970-01-01
    • 2018-10-14
    • 2023-01-08
    • 1970-01-01
    相关资源
    最近更新 更多