C# IrcDotNet连接错误身份验证失败,因为远程方在使用SSL时已关闭传输流
我正在尝试连接到Irc服务器,该服务器给了我错误: 身份验证失败,因为远程方已关闭 传输流 C代码:C# IrcDotNet连接错误身份验证失败,因为远程方在使用SSL时已关闭传输流,c#,ssl,.net-standard,irc,C#,Ssl,.net Standard,Irc,我正在尝试连接到Irc服务器,该服务器给了我错误: 身份验证失败,因为远程方已关闭 传输流 C代码: _client = new StandardIrcClient(); _ircUrl = "irc.blabla.com"; _nick = "MyNick"; _port = 7021; _useSsl = true; _channels = new[] { "#test" }; IrcUserRegistrationInfo info = new IrcUserRegistrationIn
_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,因为它表示不支持协议。您没有将SSL3
SecurityProtocolType.SSL3
添加到SecurityProtocol
中。您还需要在应用程序中启用Ssl3
安全协议
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
更新:
出现此问题的原因是ServicePointManager
和SslStream
使用的默认SSL/TLS
协议集已更改
旧值:Ssl 3.0 | Tls 1.0 | Tls 1.1
新值:Tls 1.0 | Tls 1.1 | Tls 1.2
要解决此问题,请将服务器更新为tls1.0、tls1.1或tls1.2
,因为ssl3.0
已被证明是不安全的,并且容易受到POODLE等攻击
注意:如果无法更新服务器,请使用AppContext
class退出此功能。为此,请使用以下方法之一:
以编程方式:必须是应用程序执行的第一件事,因为ServicePointManager
将只初始化一次
在应用程序中使用以下代码示例:
private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching";
private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto";
AppContext.SetSwitch(DisableCachingName, true);
AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);
您没有将Ssl3
SecurityProtocolType.Ssl3
添加到您的SecurityProtocol
。您还需要在应用程序中启用Ssl3
安全协议
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
更新:
出现此问题的原因是ServicePointManager
和SslStream
使用的默认SSL/TLS
协议集已更改
旧值:Ssl 3.0 | Tls 1.0 | Tls 1.1
新值:Tls 1.0 | Tls 1.1 | Tls 1.2
要解决此问题,请将服务器更新为tls1.0、tls1.1或tls1.2
,因为ssl3.0
已被证明是不安全的,并且容易受到POODLE等攻击
注意:如果无法更新服务器,请使用AppContext
class退出此功能。为此,请使用以下方法之一:
以编程方式:必须是应用程序执行的第一件事,因为ServicePointManager
将只初始化一次
在应用程序中使用以下代码示例:
private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching";
private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto";
AppContext.SetSwitch(DisableCachingName, true);
AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);
我正在使用NETStandard,无法添加Ssl3,因为我得到:
请求的安全协议不受支持。
@SnakeEyes您使用的是什么.Net Framework版本?我有.Net Core 2.2应用程序,它使用.NETStandard 2.0库(上面提供了代码),请参阅我答案中的更新。我希望这对您有所帮助。我没有使用NET Framework…因此这对我使用NETStandard没有帮助,并且无法添加Ssl3,因为我得到:请求的安全协议不受支持。
@SnakeEyes您使用的是什么.NET Framework版本?我有使用.NETStandard 2.0库的.NET Core 2.2应用程序(上面提供了代码)请看我答案中的更新。我希望这对你有帮助。我没有使用NET Framework…所以这对我没有帮助,你可以提供一个实际的IRC服务器,所以我可以用?可以在端口>=6697的任何IRC上测试,并在Connect
method中使用SSL标志。你可以提供一个实际的IRC服务器吗,因此,我可以使用?可以在端口>=6697的任何irc上进行测试,并在Connect
方法中设置useSSL标志