C# 无证书的SSL流
我正在设计一个基于TCP的客户机-服务器体系结构的系统。服务器和客户端之间的所有消息都需要加密。因此,我考虑在.NET框架中使用C# 无证书的SSL流,c#,.net,sockets,ssl,tcp,C#,.net,Sockets,Ssl,Tcp,我正在设计一个基于TCP的客户机-服务器体系结构的系统。服务器和客户端之间的所有消息都需要加密。因此,我考虑在.NET框架中使用SslStream类 根据SslStream MSDN,我的理解是我们需要使用客户机和服务器证书来建立适当的通道和通信 我不想使用特定于特定计算机(客户端)或服务器的任何证书。我只是想在系统之间有一个公共密钥 是否有可能在没有证书的情况下使用SSL流 虽然TLS规范没有要求,但使用.NETSslStream实现要求服务器具有证书(及其相关私钥)。这允许任何客户端确认它正
SslStream
类
根据SslStream MSDN,我的理解是我们需要使用客户机和服务器证书来建立适当的通道和通信
我不想使用特定于特定计算机(客户端)或服务器的任何证书。我只是想在系统之间有一个公共密钥
是否有可能在没有证书的情况下使用SSL流 虽然TLS规范没有要求,但使用.NET
SslStream
实现要求服务器具有证书(及其相关私钥)。这允许任何客户端确认它正在与预期的服务器通信。或者,还可以通过让客户端向服务器提供客户端证书来对客户端进行身份验证。因此,如果您想使用SslStream
,您至少需要为服务器创建一个证书,因为这就是这个特定实现的工作方式
如果您根本不想使用证书,那么还有其他选择。例如,如果您计划在Windows域中使用您的应用程序,并且客户端/服务器都基于Windows,则您可以使用
NegotiateStream
。这还支持加密/身份验证,但不使用证书,并且还允许您识别连接另一端的用户。虽然TLS规范不要求,但使用.NETSslStream
实现要求服务器具有证书(及其关联的私钥)。这允许任何客户端确认它正在与预期的服务器通信。或者,还可以通过让客户端向服务器提供客户端证书来对客户端进行身份验证。因此,如果您想使用SslStream
,您至少需要为服务器创建一个证书,因为这就是这个特定实现的工作方式
如果您根本不想使用证书,那么还有其他选择。例如,如果您计划在Windows域中使用您的应用程序,并且客户端/服务器都基于Windows,则您可以使用
NegotiateStream
。这也支持加密/身份验证,但不使用证书,并且还允许您识别连接另一端的用户。OpenSSL支持无证书连接,但您需要将其配置为使用Diffie-Hellman密钥交换。OpenSSL支持无证书连接,但您需要将其配置为使用Diffie-Hellman密钥交换。事实并非如此。TLS在其规范中明确定义了“anon”密码,即没有证书。如果您使用ECDHE或DHE,则无需证书即可安全地交换密钥。@Drawaes您是正确的,但是似乎无法通过.NET的SslStream
(根据AuthenticateTaserver()上的文档)使用匿名密钥交换模式
方法,证书参数是必需的)。我已经相应地更新了我的答案,但事实并非如此。TLS在其规范中明确定义了“anon”密码,即没有证书。如果您使用ECDHE或DHE,则无需证书即可安全地交换密钥。@Drawaes您是正确的,但是似乎无法通过.NET的SslStream
(根据AuthenticateTaserver()上的文档)使用匿名密钥交换模式
方法,证书参数是必需的)。我已相应地更新了我的答案。