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

TLS handshake fail, but communication is not closed

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

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

正如预期的那样,握手失败,服务器可供下一个客户端使用,但在 Telnet 客户端,我没有收到任何表明握手失败以及服务器正在接受其他客户端的指示。 我可以在 Wireshark 中看到,即使在握手失败后,Telnet 客户端也可以发送字符串;我看到客户端的 [PSH, ACK] 被服务器的 [ACK] 回复。

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

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

As expected, the handshake failed ...

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

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

... the server is available to the next client

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