【问题标题】:Tcpip listener sockets SSL streams so much confusionTcpip 侦听器套接字 SSL 流如此混乱
【发布时间】:2009-07-05 21:21:30
【问题描述】:

我正在尝试使用 .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 服务器通信吗

【问题讨论】:

    标签: .net networking tcp


    【解决方案1】:

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

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

    【讨论】:

    • 所以当客户端最初连接到服务器时,它不是 SSL 通道?看起来在套接字上方的示例中(我假设它存在是因为客户端正在调用连接到服务器)最初不是 SSL,然后以某种方式成为 SSL 通道。我在这里错过了什么吗
    • 正确,TCP连接开始时,是正常的TCP socket连接。将 SslStream 包裹在套接字的 NetworkStream 上,然后启动安全连接。他们使用 SslStream 的发送和接收方法发送所有流量。
    【解决方案2】:

    当然,您必须在此处切换到 Web 服务或 .net 远程处理(两者都适用于 2.0)。有各种关于通过 ssl 进行远程处理的资源,e.g

    【讨论】:

    • 我认为我必须“绝对”切换到任何东西 :-) 但是是的,远程处理确实可以在 SSl 上工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多