我需要使用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代码处理?