TLS 1.2握手失败:outlook.office365.com返回RST请求协助排查
Troubleshooting RST Packet Post TLS Client Hello to outlook.office365.com:993
我最近碰到个头疼的问题:当尝试连接outlook.office365.com:993时,服务器在我发送完TLS Client Hello报文后,直接返回了RST包,导致TLS握手完全失败。我已经先确认了本地主机的信任存储里包含了所需的DigiCert Global Root CA证书,排除了证书信任链的基础问题。
测试连接的命令及输出
我用openssl s_client做了详细的连接测试,命令和输出如下:
openssl s_client -debug -msg -connect outlook.office365.com:993 CONNECTED(00000003) write to 0x1b85ef0 [0x1b85f70] (247 bytes => 247 (0xF7)) 0000 - 16 03 01 00 f2 01 00 00-ee 03 03 5b 0f 23 30 2d ...........[.#0- 0010 - 6a c0 8d ba a3 46 f8 76-0d e7 ff 5e 63 19 00 bc j....F.v...^c... 0020 - 86 64 40 3e ed 29 fe 5c-28 bc d7 00 00 84 c0 30 .d@>.).\(......0 0030 - c0 2c c0 28 c0 24 c0 14-c0 0a 00 a3 00 9f 00 6b .,.(.$.........k 0040 - 00 6a 00 39 00 38 00 88-00 87 c0 32 c0 2e c0 2a .j.9.8.....2...* 0050 - c0 26 c0 0f c0 05 00 9d-00 3d 00 35 00 84 c0 2f .&.......=.5.../ 0060 - c0 2b c0 27 c0 23 c0 13-c0 09 00 a2 00 9e 00 67 .+.'.#.........g 0070 - 00 40 00 33 00 32 00 9a-00 99 00 45 00 44 c0 31 .@.3.2.....E.D.1 0080 - c0 2d c0 29 c0 25 c0 0e-c0 04 00 9c 00 3c 00 2f .-.).%.......<./ 0090 - 00 96 00 41 c0 12 c0 08-00 16 00 13 c0 0d c0 03 ...A............ 00a0 - 00 0a 00 07 c0 11 c0 07-c0 0c c0 02 00 05 00 04 ................ 00b0 - 00 ff 01 00 00 41 00 0b-00 04 03 00 01 02 00 0a .....A.......... 00c0 - 00 08 00 06 00 19 00 18-00 17 00 23 00 00 00 0d ...........#.... 00d0 - 00 20 00 1e 06 01 06 02-06 03 05 01 05 02 05 03 . .............. 00e0 - 04 01 04 02 04 03 03 01-03 02 03 03 02 01 02 02 ................ 00f0 - 02 03 00 0f 00 01 01 >>> TLS 1.2 Handshake [length 00f2], ClientHello 01 00 00 ee 03 03 5b 0f 23 00 2d 6a c0 8d ba a3 46 f8 76 0d e7 ff 5e 63 19 00 bc 86 64 40 3e ed 29 fe 5c 28 bc d7 00 00 84 c0 30 c0 2c c0 28 c0 24 c0 14 c0 0a 00 a3 00 9f 00 6b 00 6a 00 39 00 38 00 88 00 87 c0 32 c0 2e c0 2a c0 26 c0 0f c0 05 00 9d 00 3d 00 35 00 84 c0 2f c0 2b c0 27 c0 23 c0 13 c0 09 00 a2 00 9e 00 67 00 40 00 33 00 32 00 9a 00 99 00 45 00 44 c0 31 c0 2d c0 29 c0 25 c0 0e c0 04 00 9c 00 3c 00 2f 00 96 00 41 c0 12 c0 08 00 16 00 13 c0 0d c0 03 00 0a 00 07 c0 11 c0 07 c0 0c c0 02 00 05 00 04 00 ff 01 00 00 41 00 0b 00 04 03 00 01 02 00 0a 00 08 00 06 00 19 00 18 00 17 00 23 00 00 00 0d 00 20 00 1e 06 01 06 02 06 03 05 01 05 02 05 03 04 01 04 02 04 03 03 01 03 02 03 03 02 01 02 02 02 03 00 0f 00 01 01 read from 0x1b85ef0 [0x1b8b4d0] (7 bytes => -1 (0xFFFFFFFFFFFFFFFF)) write:errno=104 --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 0 bytes and written 247 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE ---
抓包信息
我还抓了握手过程的数据包,截图如下:
截图清晰显示,Client Hello报文发送后,立即收到了服务器返回的RST包,没有任何Server Hello或其他握手响应报文。
对比测试结果
为了排除本地配置问题,我找了另一台服务器(Server B)做对比:
- 两台服务器使用相同版本的OpenSSL(1.0.1e-fips 11 Feb 2013),但位于不同数据中心
- 对比两者发送的Client Hello报文,仅32位UNIX时间戳和28字节随机数存在差异,其余内容完全一致
- Server B可以正常连接outlook.office365.com:993完成TLS握手
- 另外,出现问题的Server A可以正常连接
smtp.gmail.com:993并获取证书,说明本地TLS栈和基础网络连通性没有问题
现在我有点摸不着头绪,想请教大家:
- outlook.office365.com返回RST包的可能原因有哪些?
- 我还需要排查哪些变量或者做哪些测试来定位问题?
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

