c# - 客户端和服务器无法通信,因为它们不具备通用算法,C# SslStream

标签 c# windows ssl tls1.2

以下是我在 Windows 10 上为客户端/服务器控制台应用程序进行相互 SSL 身份验证的设置:

  1. 有一个服务器监听器控制台应用程序只接受 TLS 1.0 连接。
  2. 客户端控制台应用程序使用 SslStream.AuthenticateAsClient 配置安全连接并使用 TLS 1.2 连接。
  3. 我使用以下示例进行相互 SSL 身份验证: http://www.codeproject.com/Articles/326574/An-Introduction-to-Mutual-SSL-Authentication

服务器代码:

sslStream.AuthenticateAsServer(certificate, true, SslProtocols.Tls, true);

客户端代码:

sslStream.AuthenticateAsClient(hostName, certificates, SslProtocols.Tls12, true);

错误:

异常:对 SSPI 的调用失败,请参阅内部异常。

内部异常:客户端和服务器无法通信,因为它们不具备通用算法

问题:

当我将客户端和服务器中的 SslProtocols 更改为相同时,即 TLS 1.0,SSL 握手成功。 为什么客户端和服务端的 SSL 协议(protocol)不同,握手会失败?

最佳答案

协议(protocol)必须相同。您必须在服务器和客户端之间“协商”一个通用协议(protocol),否则他们无法使用同一种语言。 SslProtocols 枚举被标记为 [Flags] 以便您可以指定多个协议(protocol),例如SslProtocols.Tls | SslProtocols.Tls12

关于c# - 客户端和服务器无法通信,因为它们不具备通用算法,C# SslStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38236302/

相关文章:

c# - 从文本文件中选择特定行并将该行拆分为数组

c# - 关于使用 ConcurrentDictionary 的一些问题

windows - 等同于 powershell 中的网络使用(列出计算机的连接)?

c++ - boost library........预构建的变体?

ssl - ZeroSSL 积分(相同的域,但我无法续订)

c# - 通过单击按钮将值从 form1 传递到 form2

c# - LINQ 获取类的属性

windows - 没有 Aero 合成就没有 vsync;无法在 CreateDesktop() 制作的桌面上打开 Aero

java - SSL 套接字连接超时

browser - 嵌入 ssl 安全页面 : browser warning