Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IrcDotNet连接错误身份验证失败,因为远程方在使用SSL时已关闭传输流_C#_Ssl_.net Standard_Irc - Fatal编程技术网

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

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

我正在尝试连接到Irc服务器,该服务器给了我错误:

身份验证失败,因为远程方已关闭 传输流

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,因为它表示不支持协议。

您没有将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标志