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

C# 向使用SocketAsyncEventArgs构建的服务器添加加密,c#,sockets,ssl,encryption,tls1.2,C#,Sockets,Ssl,Encryption,Tls1.2,我到处寻找,很惊讶地发现根本没有什么能回答这个问题: 当使用SocketAsyncEventArgs时,如何实现SSL/TLS(或类似)加密?我确实读到,理论上可以使用SslStream和“欺骗”,通过创建中间人来协调流内外的数据,以及套接字之间的数据。这一切似乎都很荒谬 我查看了BouncyCastle,但它们似乎不支持服务器端加密。诚然,这一信息的来源已有近10年的历史,但我自己的研究没有发现任何结果 我对更改服务器体系结构不感兴趣,因此请不要告诉我“我真的不需要SocketAsyncEVe

我到处寻找,很惊讶地发现根本没有什么能回答这个问题:

当使用
SocketAsyncEventArgs
时,如何实现SSL/TLS(或类似)加密?
我确实读到,理论上可以使用
SslStream
和“欺骗”,通过创建中间人来协调流内外的数据,以及套接字之间的数据。这一切似乎都很荒谬

我查看了BouncyCastle,但它们似乎不支持服务器端加密。诚然,这一信息的来源已有近10年的历史,但我自己的研究没有发现任何结果

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


我对使用
SocketAsyncEventArgs

在客户端和服务器之间实现可靠加密的任何方法都感兴趣。没有直接的方法将SAEA附加到加密。它们不共享一个API,所以一切都是桥


要做到这一点,最简单的方法是——正如您所知——
SslStream
,但是:这通常与
SocketAsyncEventArgs
不兼容。还有其他选择——例如,我可以想出至少3种不同的方法来使用“管道”;但所有这些都将是一个重大的架构变化,从赤裸裸的SAEA。因此,如果SAEA和
SslStream
之间的差异太大,SAEA和
IDuplexPipe
之间的差异就更大。然而,“管道”是为高可扩展性能而设计的,所以。。。也许它会适合你的口味?我最近写了很多关于管道的博客,如果这有帮助的话;此外,我还提供了github客户机/服务器代码示例,包括一个2.5M+ops/秒的redis-like服务器。

我将看看您在Pipeline上的博客。我已经开始研究TLS 1.2上的RFC规范,虽然不是很琐碎,但我认为使用BouncyCastle这样的库来实现协议可能会很有用,以完成(非常)低级的工作。@MatthewGoulart您可能还想问Tim Seaward“Leto”是否会支持它;“Leto”是“OpenSSL与管道的结合”@MatthewGoulart当然可以;第3部分有很多更实用的实践代码,对于实际使用更有用;但是在跳进之前要考虑的重点是:你仍然需要TLS片;选项1)中间SLSFLASH(我使用的是NETWorksStudio= > SSLStase= >管道);2) “莱托”(蒂姆的事);3) “红隼”有一个TLS包装;上次我问David Fowler这件事时,他暗示这对于socket模式还不是很完美,但是:他们正在研究这件事,我很感激这些信息。我来看看这三个选项。在读了几段之后,你的博客似乎将成为我接下来几天晚上的晚间读物。