如何追踪“SSL握手期间连接超时”和“SSL握手期间连接关闭”错误

8

我最近从AWS ELB切换到HAProxy。我在负载均衡器(HAProxy 1.5dev19)上终止SSL。

自从切换以来,HAProxy日志中出现了一些SSL连接错误(总请求数的5-10%)。有三种类型的错误一直在重复: SSL握手期间连接关闭 SSL握手期间超时 SSL握手失败(这种情况很少发生)

我使用免费的StartSSL证书,所以我的第一个想法是某些主机无法接受此证书,并且之前因为ELB没有提供日志记录,我没有看到过这些错误。唯一的问题是有些主机最终确实建立了成功的连接。

我可以无错误连接到服务器,所以我不确定如何在我的端上复制这些错误。

3个回答

8

这听起来像是在握手过程中客户端突然离开(TCP RST或超时)。这在某种程度上是正常的,但5-10%听起来太高了。可能是证书问题;我不确定它会如何呈现。

我想到的一些事情:

  • 如果协商非常缓慢,您将有更多客户端掉线。
  • 您可能有底层的TCP问题,直到您的新SSL终端代理开始报告它们,您才意识到这一点。

您是否看到有时成功有时失败的单个主机?如果是这样,这不太可能是证书问题。我不确定当用户拒绝不受信任的证书时连接如何被终止。

您可以在HAProxy机器上使用Wireshark捕获SSL握手并解析它们(对于握手分析,您不需要解密会话,尽管您可以使用服务器私钥)。


1
感谢Tim提供非常详细的回复。实际上,正是你的第一个假设,所以我将在此处发布详细信息,以防有人遇到类似的问题。 我们使用此后端来为多个发送分析的Android应用提供服务,就在它们被关闭时。有时(通常在Android上,较少在iOS上),实际上没有足够的时间完成请求,应用程序会在https协商期间或之后立即被杀死,导致由HAProxy标记的BADREQ请求。 最终,我确实使用了ssldump并分析了出现问题的原因。 - andreimarinescu

1
我也遇到了这个问题。首先出现了“SSL握手失败”,然后在关闭“option dontlognull”之后,我们在haproxy日志中还得到了“SSL握手超时”的错误消息。
起初,我确保所有的“defaults”超时时间都是正确的。
timeout connect 30s
timeout client  30s
timeout server  60s

很不幸,问题出现在“frontend”部分。
有一行代码是“timeout client 60”,我猜测它的意思是“60毫秒”而不是“60秒”。
似乎某些客户端连接速度较慢,在SSL握手期间被踢出。检查前端以查看客户端超时。

谢谢,阿德南。这确实是问题所在,我已经在蒂姆的答案评论中记录了这一点。 - andreimarinescu

0
你的haproxy ssl前端配置如何?
例如,我使用以下方法来缓解BEAST攻击: bind X.X.X.X:443 ssl crt /etc/haproxy/ssl/XXXX.pem no-sslv3 ciphers RC4-SHA:AES128-SHA:AES256-SHA
但是有些客户端似乎会生成相同的“SSL握手失败”错误。我认为这是因为配置太严格了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接