我有一个服务器正在倾听客户的方法TcpListener.BeginAcceptTcpClient()
。当客户端连接时,EndAcceptTcpClient
方法为我提供了TcpClient
对象,然后我调用该客户端流的NetworkStream.BeginRead()
来侦听从客户端传输的数据。检测SslStream(客户端)连接尝试不安全的服务器(NetworkStream)?
一切正常,直到客户端(期待服务器支持SSL)尝试连接到(不安全)服务器。当客户端尝试执行SSL握手时,从NetworkStream.BeginRead()
回调中检索到的数据当然是乱码,但在读取数据之后检测此握手的正确方法与来自客户端的“正常”消息相比如何?
SSL握手是否有一个已知的标头/签名标识符,我可以通过查看接收到的消息的前几个字节来检查普通消息和SSL握手之间的差异来检查吗?从检查收到的字节看起来它可能是ASCII 0x16 0x03 0x01 0x00
(又名<SYN><ETX><SOH><NUL>
)。
如果有一个已知的标题,是否有我可以发送给客户端的响应,告诉它认证失败(通过NetworkStream)?