gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:47:51 26 4
gpt4 key购买 nike

我正在尝试使用 .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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com