TLS 握手失败,但通信未关闭

问题描述

我有 TLS 程序,我做了一些实验。

我启动机密 TLS 服务器会话并尝试使用纯 Telnet 客户端连接到它。

正如预期的那样,握手失败并且服务器可用于下一个客户端,但在 Telnet 客户端我没有收到任何迹象表明握手失败并且服务器正在接受其他客户端。 我可以在 Wireshark 中看到,即使握手失败,Telnet 客户端也可以发送字符串;我看到来自客户端的 [PSH,ACK] 由来自服务器的 [ACK] 回答。

添加Wireshark快照,Telnet握手失败,Telnet继续发送消息,然后TLS握手成功,更多Telnet消息:

wireshark snap

如果握手失败并且他正在接受其他客户端,为什么服务器会确认 Telnet 客户端?

解决方法

不出所料,握手失败......

我在数据包捕获中看不到失败的 TLS 握手,我不确定您是如何得出这个结论的。

我只能看到源端口 60198 上的客户端(可能是您的 telnet)正在多次发送 3 个字节,而服务器只是确认了这些而不发送任何内容,也没有关闭连接。服务器可能仍在等待数据,希望在某个时候它会是一个完整的 TLS 记录。只有这样它才会被 TLS 堆栈处理,然后它可能会意识到客户端出了问题。

...服务器可供下一个客户端使用

服务器并行处理多个客户端是很正常的。相反,如果服务器不能这样做,那就不寻常了。