sslStream.AuthenticateAsClient适用于Windows 7,但在Windows 8上失败

时间:2013-11-19 19:27:38

标签: c# ssl ssl-certificate

我有一些SSL客户端代码(C#),如下所示:

X509Certificate2 cert = new X509Certificate2(@"client.pfx"); 

X509Certificate2Collection x09s = new X509Certificate2Collection();

x09s.Add(cert);

TcpClient client = new TcpClient(controllerIP, port);

sslStream = new SslStream(client.GetStream(), false, OnCertificateValidation, 
               new LocalCertificateSelectionCallback(SelectLocalCertificate));
sslStream.AuthenticateAsClient("", x09s, SslProtocols.Default, false);

这是与使用openssl运行的linux服务器进行通信。当客户端是Windows 7时,这一切都很有效。但是,当我尝试使用Windows 8客户端时,AuthenticateAsClient始终会收到一条异常消息:“无法从传输连接读取数据。连接尝试失败,因为连接方已执行一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应。“

调用LocalCertificateSelectionCallback函数并正确返回。

Windows 8中发生了哪些变化? 感谢...

1 个答案:

答案 0 :(得分:0)

我知道这是一个旧线程,但我仍然在Windows 10中从AuthenticateAsClient获得相同的答案。

当我增加客户端(TcpClient)和流(NetworkStream,SslSteram)的响应时间时,AuthenticateAsClient成功。

但是出于Windows 10中的一些奇怪的原因,在我处理连接对象(SslStream和TcpClient)并尝试再次执行连接步骤之后,AuthenticateAsClient每秒都会成功。 (成功,失败,成功,失败......)。

对于Windows 7,一切都运行良好。