C++ 如何确定传入连接是否需要SSL?

C++ 如何确定传入连接是否需要SSL?,c++,ssl,tcp,openssl,C++,Ssl,Tcp,Openssl,我想为未加密的TCP和SSL使用1个端口 目标是使1个端口成为机器的入口。这意味着将所有协议和传输多路复用到端口。例如,我查看了流的前4个字节。如果它以“GET”、“POST”、“HEAD”等开头,我知道它是HTTP协议,所以我将连接传递到HTTP服务器。如果是“HELO”或“EHLO”,我知道将其传递到SMTP服务器 问题是,如果它是SSL连接(为了将其传递到OpenSSL),我应该寻找什么?SSL 2的前两个字节是8x yz(十六进制)(x yz可以是任何东西,例如8F 13),SSL 3和

我想为未加密的TCP和SSL使用1个端口

目标是使1个端口成为机器的入口。这意味着将所有协议和传输多路复用到端口。例如,我查看了流的前4个字节。如果它以“GET”、“POST”、“HEAD”等开头,我知道它是HTTP协议,所以我将连接传递到HTTP服务器。如果是“HELO”或“EHLO”,我知道将其传递到SMTP服务器

问题是,如果它是SSL连接(为了将其传递到OpenSSL),我应该寻找什么?

SSL 2的前两个字节是8x yz(十六进制)(x yz可以是任何东西,例如8F 13),SSL 3和以后的前两个字节是16 03十六进制


更新:正如评论中指出的,某些协议要求服务器先发送一些内容(FTP和POP3仅举几个例子,评论中提到了SMTP),因此您的方法仅适用于有限数量的协议。

请注意,SMTP可能会失败。在中,第4.3.1节描述了SMTP会话的顺序。请注意,服务器先说话。换句话说,您的系统必须在客户端说话之前确定它是否是SMTPᵩ 是的,但我真的无能为力。我只能与先说话的系统兼容。像这样工作的一些系统允许使用1个协议,其中服务器使用一些超时先说话(如果客户端在x毫秒内没有先说话,则假定是该协议)。不过,这并不完全可靠。