c#使用ssl连接在控制台应用程序中注册远程对象

时间:2017-09-15 10:31:36

标签: c# vb.net ssl tcpchannel

我需要使用ssl连接(服务器证书)在控制台应用程序中注册远程对象。

现在我有vb.net代码(控制台应用程序)tcp/ip channel未受保护:

     Dim Chan As Channels.Tcp.TcpChannel
     Dim iChan As Integer = 8888
    Try
        Chan = New Channels.Tcp.TcpChannel(iChan)
        Channels.ChannelServices.RegisterChannel(Chan, False)
    Catch ex As Exception
        Console.WriteLine(" Error! ")
        Console.WriteLine()
        Return
    End Try
RegisterWellKnownServiceType(Type.GetType(ObjType), ObjUri, ObjMode)

我需要将其从Tcp.TcpChannel更改为SSL channel

我有这个工作c#示例来创建服务器ssl连接侦听器。

TcpListener server = new TcpListener(System.Net.IPAddress.Loopback, 4439);
        server.Start();
        TcpClient client = server.AcceptTcpClient();
        SslStream stream = new SslStream(client.GetStream(), false, VerifyClientCertificate, null);


        X509Certificate2 certificate = new X509Certificate2(ServerCertificateFile);
        stream.AuthenticateAsServer(certificate, true, System.Security.Authentication.SslProtocols.Tls, false);

        if (stream.RemoteCertificate != null)
            System.Console.WriteLine(stream.RemoteCertificate.Subject);
        else
            System.Console.WriteLine("No client certificate.");

        StreamReader reader = new StreamReader(stream);
        StreamWriter writer = new StreamWriter(stream);

        bool clientClose = false;
        while (!System.Console.KeyAvailable)
        {
            System.Console.WriteLine("Waiting for data...");
            string line = reader.ReadLine();
            System.Console.WriteLine("Received: {0}", line);

            if (line == "close")
            {
                clientClose = true;
                break;
            }

            writer.WriteLine(line);
            writer.Flush();
        }

        if (!clientClose) System.Console.ReadKey();

        stream.Close();
        server.Stop();
    }

     private static bool VerifyClientCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        switch (sslPolicyErrors)
        {
            case SslPolicyErrors.RemoteCertificateNameMismatch:
                Console.WriteLine("Server name mismatch. End communication ...\n");
                return false;
            case SslPolicyErrors.RemoteCertificateNotAvailable:
                Console.WriteLine("Server's certificate not available. End communication ...\n");
                return false;
            case SslPolicyErrors.RemoteCertificateChainErrors:
                Console.WriteLine("Server's certificate validation failed. End communication ...\n");
                return false;
        } 
        Console.WriteLine("Server's authentication succeeded ...\n");
        return true;
    }

如何更改此代码以便我可以执行当前处理的VB代码处理?

0 个答案:

没有答案