【问题标题】:C#: SSL with SocketAsyncEventArgs?C#:带有 SocketAsyncEventArgs 的 SSL?
【发布时间】:2010-10-07 11:37:35
【问题描述】:

我正在使用 C# .NET 开发一个套接字服务器。我使用的是 SocketAsyncEventArgs 类提供的异步模型,因为它必须是一个高性能服务器才能在短时间内支持许多连接。接下来,我想保护之间的通信 客户端和服务器,我想我可以使用 SSL。

有什么方法可以将 SSL 与 SocketAsyncEventArgs 模型一起使用?我知道 .NET 有用于 SSL 保护的 SslStream 类,但我需要使用 SocketAsyncEventArgs 以获得高性能。

是否可以在上层使用 SSL,而不在服务器代码中实现它?

提前致谢。

【问题讨论】:

  • 约翰你有没有得到更多关于这个的信息?

标签: c# ssl client-server


【解决方案1】:

不确定是否有人再关心了,因为它太旧了,但我这周只需要这样做,并且在互联网上找不到任何满足我需求的东西。也许框架中有一些我无法找到的新东西......无论如何,我会发布源代码但因为我为我的公司编写了它并且他们倾向于对此皱眉,所以我将概述我的方法采取:

由于 SslStream 在构造函数中采用流,我实现了自己的 Stream 子类型,其中一个底层 MemoryStream 用于读取,另一个用于写入。我也将 TcpClient 传递给这个对象。

我使用 TcpClient 进行握手以设置 SSL 连接。根据我的使用方式对服务器或客户端进行身份验证后,我使用我的两个 MemoryStream 进行 SslStream 读/写。

所以对于异步写入,我首先将我的有效负载写入 SslStream,该 SslStream 填充我的 MemoryStream 以使用加密数据写入。使用来自 MemoryStream 的加密数据,我填充 SocketAsyncEventArgs 缓冲区并调用 TcpClient SendAsync 方法。对于读取,情况恰恰相反。

我不能说像这样移动数据让我特别兴奋,但只要你不让 MemoryBuffer 对象不断地重新分配,这不是性能问题。至少这样,我可以只使用框架和我自己的代码,而不依赖第三方软件。

【讨论】:

    【解决方案2】:

    您可以采用 SSL/TLS 协议的第三方实现,例如我们的SecureBlackbox,并将其用于任何传输,包括异步模式下的 .NET 套接字。 SecureBlackbox 的 SSL 服务器组件没有自己的套接字,而是触发事件,您可以在其处理程序中编写与套接字相关的代码。这样您就可以插入任何传输,甚至是非套接字传输。

    【讨论】:

      【解决方案3】:

      我想我可能找到了提供此功能的项目。

      https://sourceforge.net/projects/socketservers/

      我仍在使用它,并且遇到了加载服务器证书的问题,但是,查看源代码看起来很有希望。

      我不确定的一个方面是它 p/invokes to secur32.dll 而不是纯 c# 实现,所以我不确定它对内存/性能的影响是什么。

      sourceforge 项目页面上关于项目目标的详细信息很少。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        • 2011-07-17
        相关资源
        最近更新 更多