gpt4 book ai didi

c#-2.0 - AuthenticateAsClient : System. IO.IOException:从传输流接收到意外的 EOF 或 0 字节

转载 作者:行者123 更新时间:2023-12-02 18:43:04 25 4
gpt4 key购买 nike

由于 Heartbleed ,我们的网关服务器已更新,这个问题就出现了。

由于 POODLE ,不再支持 SSLv3。

  • 注意,该问题仅出现在 Win7+ 机器上; WinXP 盒子工作没有问题(相同的代码,不同的操作系统 = 问题);当然,WinXP 不再是一个有效的操作系统,只是想记下功能。

客户端应用程序 (.NET 2.0) 位于 Windows 7(或 8)机器上。服务器在网关服务器后面的 DMZ 内运行。请注意,我发现这个问题在 .NET 4.0+ 上不再存在 - 但是由于遗留代码,我没有更新的余地。

网关服务器是运行带有 SSL 的 Apache HTTP 服务器的直通盒。它的位置在DMZ之外,用于访问DMZ内部的服务器。网关服务器上运行的软件版本为 Apache/2.2.25 (Win32)、mod_jk/1.2.39、mod_ssl/2.2.25、OpenSSL/1.0.1g

这是客户端应用程序上使用的代码(添加了大量日志记录)...注意,“serverName”通常包含诸如“https://some.url.com”之类的值

private bool ConnectAndAuthenicate(string serverName, out TcpClient client, out SslStream sslStream)
{
client = null;
sslStream = null;
try
{
client = new TcpClient(serverName, 443); // Create a TCP/IP client; ctor attempts connection
Log("ConnectAndAuthenicate: Client CONNECTED"));

sslStream = new SslStream(client.GetStream(), false, ValidateServerCertificate, null);
Log("ConnectAndAuthenicate: SSL Stream CREATED"));
}
catch (Exception x)
{
Log("ConnectAndAuthenicate: EXCEPTION >> CONNECTING to server: {0}", x.ToString()));

if (x is SocketException)
{
SocketException s = x as SocketException;
Log("ConnectAndAuthenicate: EXCEPTION >> CONNECTING to server: Socket.ErrorCode: {0}", s.ErrorCode));
}
if (client != null) { client.Close(); client = null; }
if (sslStream != null) { sslStream.Close(); sslStream = null; }
}

if (sslStream == null) return false;

try
{
sslStream.ReadTimeout = 10000; // wait 10 seconds for a response ...
Log("ConnectAndAuthenicate: AuthenticateAsClient CALLED ({0})", serverName));
sslStream.AuthenticateAsClient(serverName);
Log("ConnectAndAuthenicate: AuthenticateAsClient COMPLETED SUCCESSFULLY"));
return true;
}
catch (Exception x)
{
Log("ConnectAndAuthenicate: EXCEPTION >> AuthenticateAsClient: {0}", x.ToString()));
client.Close(); client = null;
sslStream.Close(); sslStream = null;
}
return false;
}

注意 - answers posted与 ServicePointManager 相关的内容对此应用程序的结果绝对没有影响。

当应用程序在 Win 7+ 机器上运行时,每次调用 AuthenicateAsClient() 时,都会发生异常 - 如果应用程序在 WinXP 机器上运行,则代码可以正常工作,不会出现异常。

非常欢迎任何解决方案的想法。

最佳答案

按照设置 ServicePointManager.SecurityProtocol 的轨迹带有 SecurityProtocolType 的静态 ctor ,我发现提到了另一个名为 SslPolicy 的枚举 - 进一步的研究发现 AuthenicateAsClient has an overload以 SslPolicy 作为参数。

更改上面代码中的这一行可以解决此问题:

sslStream.AuthenticateAsClient(serverName, null, SslPolicy.Tls, false);

关于c#-2.0 - AuthenticateAsClient : System. IO.IOException:从传输流接收到意外的 EOF 或 0 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25414907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com