C#:SSL与SocketAsyncEventArgs?

时间:2010-10-07 11:37:35

标签: c# ssl client-server

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

有没有办法在SocketAsyncEventArgs模型中使用SSL?我知道.NET有用于SSL保护的SslStream类,但我需要使用SocketAsyncEventArgs来获得高性能。

是否可以在较高级别使用SSL,而无需在服务器代码中实现它?

提前致谢。

3 个答案:

答案 0 :(得分:7)

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

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

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

因此,对于Async写入,我首先将我的有效负载写入SslStream,它填充我的MemoryStream以便使用加密数据进行写入。使用来自MemoryStream的加密数据,我填充SocketAsyncEventArgs缓冲区并调用TcpClient SendAsync方法。对于阅读来说,情况正好相反。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

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

sourceforge项目页面的详细信息很少,关于项目的目标是什么。