2017-06-08 3 views
0

私は、SSLサーバ/クライアントプログラムを書く必要があり:なぜwiresharkを使用してc#ssl server/clientプログラムにTCPパッケージがあるのですか?

サーバー:

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

TCPはここにはありません。 –

+0

ところで、SSL/TLSの会話をキャプチャして、WiresharkがSSL/TLSハンドシェイクでストリームをよりよく識別できるようにする必要があります。さもなければ、そのようなパケットはTCPの上のランダムデータのようです。 –

答えて

0

SSLハンドシェイクは、アプリケーション層ではないTCP/IP層

であり、あなたがwiresharkのモニターTCP/IPレイヤを知っているので、あなたには、いくつかのあいまいなデータとの握手のTcpの過程を見ることができるように、暗号化されているので、 SSLの公開鍵または秘密鍵を使用します。 したがって、正確なSSLハンドシェイクプロセスをWiresharkで監視することはできません(私はSSLで何度も働いていますが、正確にsslハンドシェイクプロセスを監視するツールはありません)。 幸運。

関連する問題