Tcpip监听器套接字SSL流如此混乱

时间:2009-07-05 21:21:31

标签: .net networking tcp

我正在尝试使用.NET编写tcpip服务器代码。查看此站点上的主题,一般的共识似乎是使用.NET 3.5 SocketArgs类的某些变体来最大程度地扩展 但是我也必须使用SSL,唯一的方法就是使用tcplistener,然后从Begin \ End Accept方法中获取tcpclient,然后获取底层网络流并使用它将SSl流分层。 beginauthasserver 然后使用此流执行BeginRead \ Write以与客户端进行通信

我想我的问题是嗯

我对上面的理解是如何使用.NET

在SSl上进行tcpip的

因为每个人都说使用socketeventargs类,我不认为我可以支付多少罚款,这只是安全通道的价格。

Shoud我使用WCF,如果是这样,我对.NET 2.0客户端的选择是什么(我们的产品在桌面上不需要3.5)。换句话说,我可以使用.NET 2.0 TcpCLient类与3.5 WCF tcp服务器进行通信

2 个答案:

答案 0 :(得分:4)

一旦连接了Socket,让SSL在套接字上工作并不是一个非常复杂的设置。首先,您需要使用以Socket作为参数的构造函数来分配NetworkStream对象。然后,我使用构造函数(NetworkStream,bool,RemoteCertificateValidationCallback)创建了一个SslStream对象。然后,您需要调用AuthenticateAsServer或AuthenticateAsClient。这是一个示例:

private SslStream WrapSocket(Socket socket)
{
  var myNetworkStream = new NetworkStream(socket);
  var mySslStream = new SslStream(myNetworkStream, false, OnCertificateValidation);
  mySslStream.AuthenticateAsClient(String.Empty);
}

private static bool OnCertificateValidation (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
  return true; // NOT RECOMMENDED FOR PRODUCTION CODE
}

然后我只使用返回的SslStream进行所有正常通信。一旦你有一个.CER文件,服务器的一半代码就没那么复杂了。使用以下2行替换AuthenticateAsClient调用:

var certificate = X509Certificate.CreateFromCertFile("my.cer");
mySslStream.AuthenticateAsServer(certificate);

答案 1 :(得分:-1)

肯定你必须在这里切换到web服务或.net远程处理(两者都适用于2.0)。关于ssl的远程处理有各种资源,e.g