代码之家  ›  专栏  ›  技术社区  ›  Vivek Shukla

要成功运行安全SslStream程序,需要提供哪些输入

  •  0
  • Vivek Shukla  · 技术社区  · 7 年前

    我试图在c#中的安全套接字实现方面获得一些进展。在我的追求中,我通过维基百科和其他来源了解了TLS握手的工作原理。

    我还想查看一些示例代码,无意中发现了以下内容 https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslstream?redirectedfrom=MSDN&view=netframework-4.7.2

    有两个程序(控制台应用程序),基本上一个用于客户端,另一个用于服务器,为了能够运行程序,Main方法需要提供一些参数,即MachineName和ServerCertificateName。

    请建议如何获得证书以满足证书名称字段的要求。

    0 回复  |  直到 7 年前
        1
  •  1
  •   Zergatul    7 年前

    下面是一个带有两个线程的简单示例。您可以在两个应用程序之间分离这些线程。

    static void Main(string[] args)
    {
        var serverThread = new Thread(() =>
        {
            var server = new TcpListener(IPAddress.Any, 12345);
            server.Start();
            var client = server.AcceptTcpClient();
            var ssl = new SslStream(client.GetStream());
            // certificate file with private key and password
            var cert = new X509Certificate2(@"rsa-4096.pfx", "hh87$-Jqo");
            ssl.AuthenticateAsServer(cert);
            ssl.Write(Encoding.ASCII.GetBytes("Hello world"), 0, 11);
            ssl.Flush();
            ssl.Close();
            server.Stop();
        });
    
        var clientThread = new Thread(() =>
        {
            var client = new TcpClient();
            client.Connect(IPAddress.Loopback, 12345);
            // last parameter disables certificate validation
            var ssl = new SslStream(client.GetStream(), false, (a, b, c, d) => true);
            ssl.AuthenticateAsClient("localhost");
            using (var sr = new StreamReader(ssl, Encoding.ASCII))
            {
                string recivedText = sr.ReadToEnd();
                Console.WriteLine(recivedText);
            }
        });
    
        serverThread.Start();
        clientThread.Start();
    
        serverThread.Join();
        clientThread.Join();
    }
    

    您可以在此处下载示例证书: https://github.com/Zergatul/ZergatulLib/blob/master/ConsoleTest/rsa-4096.pfx