我有一個服務器正在傾聽客戶的方法TcpListener.BeginAcceptTcpClient()
。當客戶端連接時,EndAcceptTcpClient
方法爲我提供了TcpClient
對象,然後我調用該客戶端流的NetworkStream.BeginRead()
來偵聽從客戶端傳輸的數據。檢測SslStream(客戶端)連接嘗試不安全的服務器(NetworkStream)?
一切正常,直到客戶端(期待服務器支持SSL)嘗試連接到(不安全)服務器。當客戶端嘗試執行SSL握手時,從NetworkStream.BeginRead()
回調中檢索到的數據當然是亂碼,但在讀取數據之後檢測此握手的正確方法與來自客戶端的「正常」消息相比如何?
SSL握手是否有一個已知的標頭/簽名標識符,我可以通過查看接收到的消息的前幾個字節來檢查普通消息和SSL握手之間的差異來檢查嗎?從檢查收到的字節看起來它可能是ASCII 0x16 0x03 0x01 0x00
(又名<SYN><ETX><SOH><NUL>
)。
如果有一個已知的標題,是否有我可以發送給客戶端的響應,告訴它認證失敗(通過NetworkStream)?