.net - Tcpip 监听器套接字 SSL 流如此困惑

标签 .net networking tcp

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

我想我的问题是嗯

关于如何使用 .NET 在 SSl 上执行 tcpip,我的上述理解是否正确

既然大家都说使用 socketeventargs 类,我不认为我可以支付多少罚款,是否只是安全通道的价格。

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

最佳答案

一旦你有一个连接的套接字,让 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 文件,服务器端的代码就不会那么复杂了。用以下两行替换 AuthenticateAsClient 调用:

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

关于.net - Tcpip 监听器套接字 SSL 流如此困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1084846/

相关文章:

networking - TCP 慢启动术语混淆

java - 用于 tcp 端口中两侧通信的线程套接字处理程序

python - 如何在 Windows 上发送自定义 tcp 数据包?

c# - 检测代码克隆在 Visual Studio 2019 中不可用

.net - 使用 .NET 反射的私有(private)方法。为什么?

c# - XmlException : The input document has exceeded a limit set by MaxCharactersFromEntities

.net - ODP.NET 可以重新分发吗?

网络上的 C# 应用程序

TCP 和 SCTP 上的 Linux 内核

c++ - DisableAddressSharing注册表不起作用