gpt4 book ai didi

c# - 迁移到 .NET 4.51 时 SSLStream 抛出异常

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:46 24 4
gpt4 key购买 nike

以前在 .NET 3.5 中,此代码运行良好:

protected bool OpenSsl(string hostSslServer)
{
if ((this._enableSSL == false) || (this._isSSLOpen == true))
return (true);

this._isSSLOpen = false;

this._sslConnectionStream = new SslStream(this._tcpSocket.GetStream(), false, new RemoteCertificateValidationCallback(this.ValidateServerCertificate), null);
this._sslConnectionStream.AuthenticateAsClient(hostSslServer);
this._sslProtocol = _sslConnectionStream.SslProtocol.ToString();

this._isSSLOpen = true;
return (true);
}

行 this._sslProtocol = _sslConnectionStream.SslProtocol.toString();旨在确定正在使用的协议(protocol)。但是从那时起我发现 TLS1.1 和 TLS1.2 不是 3.5 中 SslProtocols 枚举的一部分,所以我将项目切换到 4.5。但是现在我抛出了异常,特别是 AuthenticateAsClient 行。异常是“对 SSPI 的调用失败,请参阅内部异常。”内部异常是“收到的消息是意外的或格式错误”。

从那以后我做了一些研究,发现我可以使用这段代码进行连接:

System.Security.Cryptography.X509Certificates.X509Certificate2Collection xc = new System.Security.Cryptography.X509Certificates.X509Certificate2Collection();
this._sslConnectionStream.AuthenticateAsClient(hostSslServer, xc, System.Security.Authentication.SslProtocols.Tls12, false);

这用对 AuthenticateAsClient 的调用替换了上一行。但是这里的问题是,使用这段代码(我不得不承认我不明白)我将 ssl 协议(protocol)设置为参数之一。我不想那样做。我想知道我正在连接的主机使用的是什么 ssl 协议(protocol)。

有什么办法解决这个问题吗?

从那时起,我将 sslprotocols 的参数更改为:

Ssl协议(protocol).Ssl2 | Ssl协议(protocol).Ssl3 | SSL协议(protocol).Tls | SSL协议(protocol).Tls11 | SSL协议(protocol).Tls12

并且抛出另一个异常:“客户端和服务器无法通信,因为它们不具备通用算法”

最佳答案

我从协议(protocol)列表中删除了 SSL2,它可以正常工作。

关于c# - 迁移到 .NET 4.51 时 SSLStream 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33548190/

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