关于SslStream握手的问题

仙剑 仙剑 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近遇到一个奇怪的问题,使用SslStream做Socket通讯,发现建立Ssl连接很慢,客户端代码如下:


try
{
mTcpClient = new TcpClient(AddressFamily.InterNetwork);
mTcpClient.Connect(address, port);
if (mTcpClient.Connected)
{
if (mIsSSL)
{
SslStream sslStream = new SslStream(mTcpClient.GetStream(), false, (s, cert, chain, err) => true);
sslStream.AuthenticateAsClient(CERT_NAME);
mStream = sslStream;
}
else
{
mStream = mTcpClient.GetStream();
}
mIsConnected = true;
OnConnectionEvent(Defines.EVT_NET_CONNECTED, string.Format("Server connected"));
OnDebug(LogMode.Info,
string.Format("Server connected.\tLocal:{0}\tRemote:{1}", mTcpClient.Client.LocalEndPoint,
mTcpClient.Client.RemoteEndPoint));

//开始接收数据
mStream.BeginRead(mReceiveBuffer, 0, mHeadSize, ReceiveMessageWorker, mStream);

//发送Hello消息
SendHelloMessage();

//启动发送心跳的线程
CreateHeartbeatThread();
}
}
catch (Exception ex)
{
OnDebug(LogMode.Error, string.Format("Connect fail.\t{0}", ex.Message));
optReturn.Result = false;
optReturn.Code = Defines.RET_FAIL;
optReturn.Message = ex.Message;
}

我通过断点调试发现程序走到sslStream.AuthenticateAsClient(CERT_NAME) 就卡在这里了,需要等待10多秒才会继续执行。应该是SslStream在握手的时候耗时了,但是不明白我已经在验证的回调函数处直接返回true,也没有做证书验证,为什么握手还这么慢呢?

另外,只有某些环境下才有这个问题,我猜测可能与网络环境有关,出问题的环境是内网,连不了互联网。

难道SslStream在握手的过程中试图连接了互联网上某个证书验证服务器?
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
仙剑
C# 111,128 成员 642,536 内容