向使用SocketAsyncEventArgs构建的服务器添加加密

时间:2018-08-08 22:21:27

标签: c# sockets ssl encryption tls1.2

我看上去高低不一,很惊讶地发现绝对没有什么可以回答这个问题:

使用SocketAsyncEventArgs时如何实现SSL / TLS(或类似的)加密?我确实读过一个可以理论上使用{{1} }和“欺骗”,方法是在中间和中间创建一个中间层,以协调数据在套接字中进出流。一切似乎都很荒谬...

我调查了BouncyCastle,但它们似乎不支持服务器端加密。不可否认,此信息的来源已有将近10年的历史,但我自己的研究并未发现任何问题。

我对更改服务器体系结构不感兴趣,因此请不要告诉我“我真的不需要SslStream的性能,而应该更改为SocketAsyncEVentArgs”。

我对使用TcpListener在客户端和服务器之间实施可靠加密的任何方法感兴趣。

1 个答案:

答案 0 :(得分:1)

没有将SAEA附加到加密的直接方法。他们没有共同的API,所以一切都是桥梁。

最简单的方法是-如您所知-SslStream,但是:通常与SocketAsyncEventArgs不兼容。还有其他选择-例如,我可以想到至少3种不同的“管道”方法;但是所有这些都将是 naked SAEA的主要架构变化。因此,如果SAEA与SslStream之间的差异太大,则SAEA与IDuplexPipe之间的差异甚至更大。但是,“管道”是为高可扩展性能而设计的设计的,所以...也许无论如何它都适合您的口味?如果有帮助的话,我最近在博客上写了很多 管道。再加上我有客户端/服务器代码的github示例,包括一个2.5M +运维/秒的Redis式服务器。