【发布时间】:2013-03-09 21:43:34
【问题描述】:
我有一台服务器正在使用TcpListener.BeginAcceptTcpClient() 方法侦听客户端。当客户端连接时,EndAcceptTcpClient 方法给了我TcpClient 对象,然后我调用该客户端流的NetworkStream.BeginRead() 来监听从客户端传输的数据。
在客户端(希望服务器支持 SSL)尝试连接到(不安全的)服务器之前,一切正常。当客户端尝试进行 SSL 握手时从NetworkStream.BeginRead() 回调中检索到的数据当然是胡言乱语,但是在读取数据与来自客户端的“正常”消息之后检测此握手的正确方法是什么?
SSL 握手是否有一个已知的标头/签名标识符,我可以通过查看收到的消息的前几个字节来检查以区分普通消息和 SSL 握手之间的区别?通过检查收到的字节,它看起来可能是 ASCII 0x16 0x03 0x01 0x00(又名 <SYN><ETX><SOH><NUL>)。
如果有一个已知的标头,我是否可以向客户端发送一个响应来告诉它身份验证失败(通过 NetworkStream)?
【问题讨论】:
标签: c# ssl tcpclient networkstream