-1

我们有一些仍然只支持 tls1 的遗留系统(有计划很快关闭它,但还不够快)。

为了连接到我们的新系统,我启用了 tls1 连接。但是,当我运行如下命令时: openssl s_client -connect host:port 我连接失败。添加 -debug 开关以查看为什么我看到以下内容时:

CONNECTED(00000004)
write to 0x8000d02160 [0x8000d64000] (139 bytes => 139 (0x8B))
0000 - 80 89 01 03 01 00 60 00-00 00 20 00 00 39 00 00   ......`... ..9..
0010 - 38 00 00 35 00 00 88 00-00 87 00 00 84 00 00 16   8..5............
0020 - 00 00 13 00 00 0a 07 00-c0 00 00 33 00 00 32 00   ...........3..2.
0030 - 00 2f 00 00 45 00 00 44-00 00 41 03 00 80 00 00   ./..E..D..A.....
0040 - 05 00 00 04 01 00 80 00-00 15 00 00 12 00 00 09   ................
0050 - 06 00 40 00 00 14 00 00-11 00 00 08 00 00 06 04   ..@.............
0060 - 00 80 00 00 03 02 00 80-00 00 ff 29 c2 dd fb 71   ...........)...q
0070 - 5b 62 90 9e 5b b7 e7 5f-2e 67 9f a2 d2 01 eb bd   [b..[.._.g......
0080 - 7f 16 28 2a 66 eb 37 78-92 d7 80                  ..(*f.7x...
read from 0x8000d02160 [0x8000d6a000] (7 bytes => 0 (0x0))
59659:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/home/src/secure/lib/libssl/../../../crypto/openssl/ssl/s23_lib.c:182:

但是,当我添加 -tls1 开关时,我会按预期连接。我很困惑为什么会这样。openssl 连接时不应该尝试所有可接受的方法吗?

4

1 回答 1

2
0000 - 80 89 01 03 01 ...

这是一个与 SSLv2 兼容的 ClientHello (0x01),宣布支持 TLS 版本 1.0 (0x0301)。我的猜测是服务器不理解与 SSLv2 兼容的握手(长期过时),但希望您可以通过该-tls1选项获得正确的 TLS 握手。

鉴于您openssl s_client默认执行此 SSLv2 兼容握手​​并且它仅支持 TLS 1.0 而不是更好(因为这是默认情况下宣布的最大版本),这表明您使用的是旧版本且不受支持的 OpenSSL,即 0.9.8 或1.0.0。

openssl 连接时不应该尝试所有可接受的方法吗?

这不是 SSL/TLS 的工作方式。没有各种方法的尝试。相反,客户端宣布它可以做的最好的事情(在你的情况下是 TLS 1.0),服务器选择一个等于或低于客户端支持的版本的协议版本,希望客户端会接受这个。

于 2017-06-29T18:21:50.027 回答