为什么使用 wireshark 捕获一个 c# ssl server/client 程序得到 TCP 包?

why use wireshark capture a c# ssl server/client program got TCP package?

我写了一个ssl server/client程序:

服务器:

static void Main(string[] args) 
{ 
    var store = new X509Store(StoreName.Root); 
    store.Open(OpenFlags.ReadWrite); 
    var certs = store.Certificates.Find(X509FindType.FindBySubjectName, "TestServer", false); 
    var x509 = certs[0]; 

    var listener = new TcpListener(IPAddress.Parse("192.168.97.2"), 2000); 
    listener.Start(); 

    while (true) 
    { 
      var client = listener.AcceptTcpClient(); 
      var sslStream = new SslStream(client.GetStream(), false); 
      sslStream.AuthenticateAsServer(x509, false, SslProtocols.Tls, true); 
      Console.WriteLine(ReadMessage(sslStream)); 
    }     
}

客户:

static void Main(string[] args) 
{ 
  var client = new TcpClient("192.168.97.2",2000); 
  var ssl = new SslStream(client.GetStream(), false, new    RemoteCertificateValidationCallback(ValidateServerCertificate), null); 
  ssl.AuthenticateAsClient("TestServer"); 
  byte[] message = Encoding.UTF8.GetBytes("abc"); 
  ssl.Write(message); 
  ssl.Flush(); 
  client.Close(); 
}

它工作正常,但是当我尝试通过 wireshark 捕获网络包时,我在服务器和客户端之间获取了 TCP 包。

我想我应该得到TLS包,我不知道为什么。

SSL handshake is in application layer not TCP/IP layer

并且如您所知,wireshark 监控 TCP/IP 层,因此您可以看到握手的 Tcp 过程带有一些不明确的数据,因为它是使用 SSL public 或私钥加密的。 所以你不能用 Wireshark 监控准确的 SSL 握手过程(虽然我用 SSL 工作了很多时间,但我找不到任何工具来监控准确的 ssl 握手过程)。 祝你好运。