为什么使用 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 握手过程)。
祝你好运。
我写了一个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 握手过程)。 祝你好运。