没有证书的SslStream

1 .net c# sockets ssl tcp

我正在设计一个客户端服务器架构的系统 - 基于TCP.要求服务器和客户端之间的所有消息都应加密.所以我想SslStream在.NET Framework 中使用类.

从SslStream MSDN,我的理解是我们需要使用客户端和服务器证书来建立适当的渠道和沟通.

我不想使用特定于特定机器(客户端)或服务器的任何证书.我只是想在系统之间有一个共同的密钥.

是否有可能在没有证书的情况下使用SSL流?

Iri*_*ium 5

虽然TLS规范不要求,但.NET SslStream实现的使用要求服务器具有证书(及其关联的私钥).这允许任何客户端确认它正在与它期望的服务器进行通信.可选地,还可以通过让客户端向服务器提供客户端证书来对客户端进行身份验证.因此,如果您想使用SslStream,您至少需要为服务器创建证书,因为这是特定实现的工作方式.

如果您根本不想使用证书,那么还有其他选择.例如,如果您计划在Windows域中使用应用程序,并且客户端/服务器都是基于Windows的,则可以使用NegotiateStream.这也支持加密/身份验证,但不使用证书,并且还允许您识别连接另一端的用户.

  • @Drawaes你是对的,但似乎不可能通过.NET的`SslStream`使用匿名密钥交换模式(根据`AuthenticateAsServer()`方法的文档,证书参数是必需的).我已相应更新了我的答案. (2认同)