OpenSSL错误提醒握手失败。

11

尝试连接某些网站时,OpenSSL 连接失败。在 OpenSSL 的 s_client 中我会得到以下错误:

$ openssl s_client -connect www.airvistara.com:443 -debug
CONNECTED(00000003)
write to 0x600060cf0 [0x600076e90] (346 bytes => 346 (0x15A))
0000 - 16 03 01 01 55 01 00 01-51 03 03 b7 94 61 d2 52   ....U...Q....a.R
0010 - 8e fa c5 5e 3d d0 0b 62-91 14 c3 21 d5 62 3a e8   ...^=..b...!.b:.
0020 - 27 1c 99 12 0c e8 1d e8-ea cf 15 00 00 b4 c0 30   '..............0
0030 - c0 2c c0 28 c0 24 c0 14-c0 0a 00 a5 00 a3 00 a1   .,.(.$..........
0040 - 00 9f 00 6b 00 6a 00 69-00 68 00 39 00 38 00 37   ...k.j.i.h.9.8.7
0050 - 00 36 00 88 00 87 00 86-00 85 c0 32 c0 2e c0 2a   .6.........2...*
0060 - c0 26 c0 0f c0 05 00 9d-00 3d 00 35 00 84 c0 2f   .&.......=.5.../
0070 - c0 2b c0 27 c0 23 c0 13-c0 09 00 a4 00 a2 00 a0   .+.'.#..........
0080 - 00 9e 00 67 00 40 00 3f-00 3e 00 33 00 32 00 31   ...g.@.?.>.3.2.1
0090 - 00 30 00 9a 00 99 00 98-00 97 00 45 00 44 00 43   .0.........E.D.C
00a0 - 00 42 c0 31 c0 2d c0 29-c0 25 c0 0e c0 04 00 9c   .B.1.-.).%......
00b0 - 00 3c 00 2f 00 96 00 41-c0 11 c0 07 c0 0c c0 02   .<./...A........
00c0 - 00 05 00 04 c0 12 c0 08-00 16 00 13 00 10 00 0d   ................
00d0 - c0 0d c0 03 00 0a 00 15-00 12 00 0f 00 0c 00 09   ................
00e0 - 00 ff 02 01 00 00 73 00-0b 00 04 03 00 01 02 00   ......s.........
00f0 - 0a 00 3a 00 38 00 0e 00-0d 00 19 00 1c 00 0b 00   ..:.8...........
0100 - 0c 00 1b 00 18 00 09 00-0a 00 1a 00 16 00 17 00   ................
0110 - 08 00 06 00 07 00 14 00-15 00 04 00 05 00 12 00   ................
0120 - 13 00 01 00 02 00 03 00-0f 00 10 00 11 00 23 00   ..............#.
0130 - 00 00 0d 00 20 00 1e 06-01 06 02 06 03 05 01 05   .... ...........
0140 - 02 05 03 04 01 04 02 04-03 03 01 03 02 03 03 02   ................
0150 - 01 02 02 02 03 00 0f 00-01 01                     ..........
read from 0x600060cf0 [0x60007c3f0] (7 bytes => 7 (0x7))
0000 - 15 03 03 00 02 02 28                              ......(
2348672:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handsha
 failure:s23_clnt.c:769:
...

我的强项不在SSL方面,因此需要一些指导。该客户端软件可以与几乎所有站点配合使用,但有少数站点会出现此错误。


Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户信息安全堆栈交换会更适合提问。另请参阅我应该在哪里发布Dev Ops相关的问题? - jww
3
回答你的问题,使用TLS 1.0或以上版本并带有SNI。以下命令将按预期工作:openssl s_client -connect www.airvistara.com:443 -tls1 -servername www.airvistara.com-servername会启用SNI扩展。 - jww
2个回答

11

使用此方法...

 $ openssl s_client -connect www.example.com:443 -servername www.example.com
    CONNECTED(00000003)
    ...
       Cipher    : ECDHE-ECDSA-AES128-GCM-SHA256

可能是因为OpenSSL 0.9.8版本中没有-servername选项,但在OpenSSL 1.0.1版本中应该有。


理想情况下,这应该是被接受的答案。 - reflexdemon

7
客户端软件可以与几乎所有站点配合使用,但有一些站点会出现此错误。
正如jww所评论的那样-如果您使用SNI,则不会出现此错误。
所有现代浏览器都支持SNI,但在此之外,它不支持旧版本的Java(高达JDK6),python(高达2.7.9),某些常用的Android库等。
由于SNI越来越成为要求(Cloudflare FreeSSL仅使用SNI),因此应修复客户端软件以获取SNI支持。

感谢jww和Steffen,这回答了我的问题。 - Toblakai
2
还有一个问题。你是怎么确定SNI是问题的呢? - Toblakai
2
openssl s_client 的输出中可以看出,如果没有 -servername 选项,它会失败,而有了这个选项就会成功。除此之外,我还有自己的 SSL 分析工具 https://github.com/noxxi/p5-ssl-tools/blob/master/analyze-ssl.pl。其中包括:`SSL upgrade fails without SNI`。 - Steffen Ullrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接