客户端和服务器无法通信,因为它们没有通用的算法C#SslStream

时间:2016-07-07 01:24:52

标签: 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
  4. 服务器代码:

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

    客户代码:

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

    错误:

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

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

    问题:

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

1 个答案:

答案 0 :(得分:2)

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