我有一些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中发生了哪些变化? 感谢...
答案 0 :(得分:0)
我知道这是一个旧线程,但我仍然在Windows 10中从AuthenticateAsClient获得相同的答案。
当我增加客户端(TcpClient)和流(NetworkStream,SslSteram)的响应时间时,AuthenticateAsClient成功。
但是出于Windows 10中的一些奇怪的原因,在我处理连接对象(SslStream和TcpClient)并尝试再次执行连接步骤之后,AuthenticateAsClient每秒都会成功。 (成功,失败,成功,失败......)。
对于Windows 7,一切都运行良好。