我正在编写一个接受传入 TCP 连接的服务器。假设服务器已经接受了一个 TCP 连接,并且已经从客户端收到了 16 个(左右)字节。知道这 16 个字节后,服务器如何检测客户端是否要发起 SSL 握手?
我做了一个实验,结果表明在我的 Linux 系统上通过 SSL 连接到 localhost(127.0.0.1 或 AF_UNIX)会使客户端发送以下握手(hexdump),然后是 16 个看似随机的字节:
8064010301004b0000001000003900003800003500001600001300000a07
00c000003300003200002f03008000000500000401008000001500001200
0009060040000014000011000008000006040080000003020080
服务器应该如何探测这些前几个字节,以便能够确定客户端是否正在发送 SSL 握手?对于所有有效的 SSL 握手,探测必须返回 true,并且对于客户端发送的不是 SSL 握手的消息,它必须返回 false 的概率很高。不允许使用任何库(如 OpenSSL)进行探测。探针必须是简单的代码(如 C 或 Python 中的几十行)。