关于SslStream握手的问题

仙剑 2015-11-18 06:34:27
最近遇到一个奇怪的问题,使用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在握手的过程中试图连接了互联网上某个证书验证服务器?
...全文
283 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
newlife2002_313 2016-03-01
  • 打赏
  • 举报
回复
楼主,问题解决了吗?我也遇到了这个问题,每次调用到sslStream.AuthenticateAsClient方法就会卡15s,楼主分享下解决方法吧

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧