为什么使用wireshark捕获一个c#ssl服务器/客户端程序获得TCP包?

时间:2017-06-08 02:58:25

标签: c# ssl wireshark

我已经编写了一个ssl服务器/客户端程序:

服务器:

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套餐,我不知道为什么。

1 个答案:

答案 0 :(得分:0)

  

SSL握手在应用层而不是TCP / IP层

如您所知,wireshark监视TCP / IP层,因此您可以看到Tcp进程与一些不明确的数据握手,因为它是使用SSL公钥或私钥加密的。 因此,您无法使用Wireshark监控确切的SSL握手过程(尽管我使用SSL工作了很多次,但我找不到任何用于监控ssl握手过程的工具)。 祝你好运。