gpt4 book ai didi

c# - IrcDotNet 连接错误身份验证失败,因为远程方在使用 SSL 时关闭了传输流

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:22 25 4
gpt4 key购买 nike

我正在尝试连接到 Irc 服务器,但出现错误:

Authentication failed because the remote party has closed the transport stream.

C#代码:

_client = new StandardIrcClient();
_ircUrl = "irc.blabla.com";
_nick = "MyNick";
_port = 7021;
_useSsl = true;
_channels = new[] { "#test" };

IrcUserRegistrationInfo info = new IrcUserRegistrationInfo
{
NickName = _nick,
Password = "",
RealName = _nick,
UserName = _nick
};

_client.RawMessageReceived += (s, ev) =>
{
write(ev.RawContent);
_execute(ev.RawContent);
};

_client.Connected += (s, ev) =>
{
write("Connected");
};

_client.Registered += (s, ev) =>
{
_log.Debug("registered");

if (!string.IsNullOrWhiteSpace(_inviteCommand))
{
if (_inviteCommand.IndexOf(":invite", StringComparison.OrdinalIgnoreCase) > -1)
{
_client.SendRawMessage($"PRIVMSG {_inviteCommand.Replace("invite", ":invite")}");
}
}

_client.Channels.Join(_channels);
};

_client.ConnectFailed += (s, ev) =>
{
write(ev.Error.Message);
_client.Disconnect();
};

_client.Disconnected += (s, ev) =>
{
_log.Debug("disconnected");
write("Disconnected");
};

_client.Error += (s, ev) =>
{
_log.Error(ev.Error);
};

_client.ErrorMessageReceived += (s, ev) =>
{
_log.Error(ev.Message);
};

bool useSsl = _port > 0 && _useSsl;
if (useSsl)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
}

_client.Connect(_ircUrl, _port == 0 ? 6667 : _port, useSsl, info);

编辑

我正在使用 Net Standard 库,所以我不能添加 SSL3,因为它说协议(protocol)不受支持。

最佳答案

您没有将 Ssl3 SecurityProtocolType.Ssl3 添加到您的 SecurityProtocol。您还需要在您的应用程序中启用 Ssl3 安全协议(protocol)。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

更新:出现此问题是因为 ServicePointManagerSslStream 使用的默认 SSL/TLS 协议(protocol)集已更改。

旧值: Ssl 3.0 | TLS 1.0 | TLS 1.1

新值: Tls 1.0 | TLS 1.1 | TLS 1.2

要解决此问题,请将服务器更新到 Tls 1.0、Tls 1.1 或 Tls 1.2,因为 SSL 3.0 已被证明是不安全的并且容易受到此类攻击作为 Poodle 。

注意如果您无法更新服务器,请使用 AppContext 类来选择退出此功能。为此,请使用以下方法之一:

以编程方式:必须是应用程序执行的第一件事,因为 ServicePointManager 只会初始化一次。

在您的应用程序中使用以下代码示例:

private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching";
private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto";
AppContext.SetSwitch(DisableCachingName, true);
AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);

For more information : Cannot connect to a server by using the ServicePointManager or SslStream APIs

关于c# - IrcDotNet 连接错误身份验证失败,因为远程方在使用 SSL 时关闭了传输流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58056741/

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