我已经编写了一个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套餐,我不知道为什么。
答案 0 :(得分:0)
SSL握手在应用层而不是TCP / IP层
如您所知,wireshark监视TCP / IP层,因此您可以看到Tcp进程与一些不明确的数据握手,因为它是使用SSL公钥或私钥加密的。 因此,您无法使用Wireshark监控确切的SSL握手过程(尽管我使用SSL工作了很多次,但我找不到任何用于监控ssl握手过程的工具)。 祝你好运。