SSL 连接在客户端 hello 时挂起(curl、openssl 客户端、apt-get、wget、everything)

SSL 连接在客户端 hello 时挂起(curl、openssl 客户端、apt-get、wget、everything)

我在 Debian VPS(xen domU)上遇到了与 SSL 相关的问题。也就是说,几乎所有 SSL 连接都会在客户端 hello 时挂起。例如:

# curl -vI https://graph.facebook.com

  • 即将连接()到 graph.facebook.com 端口 443 (#0)
  • 正在尝试 66.220.146.48... 已连接
  • 已连接到 graph.facebook.com (66.220.146.48) 端口 443 (#0)
  • 成功设置证书验证位置:
  • CAfile:无 CApath:/etc/ssl/certs
  • SSLv3、TLS 握手、客户端问候 (1):

使用 openssl 客户端时也一样。但是,部分 SSL 流量可以正常工作(例如https://www.nordea.se)。

服务器

#uname -a

Linux server.com 2.6.26-1-xen-amd64 #1 SMP Fri Mar 13 21:39:38 UTC 2009 x86_64 GNU/Linux

但它确实在我的 Dom 0(主 xen 主机)上运行。

apt-get - 轻松获取

我甚至无法使用 debian 安全源运行 apt-get update(读取标题时挂起)

打开 SSL

一开始我以为我有一个旧的 openssl 客户端(0.9.8o-4),因为我似乎在 Dom 0 上有一个较新的版本(0.9.8g-15+lenny8),但在 openssl deb 上进行手动更新并没有帮助。

打开 SSL 客户端

这是 openssl 客户端挂起时的完整输出:http://pastebin.com/PAjwMap9

结束语

我已经用 Google 搜索了这个问题,但没有任何进展。我见过 curl、apt-get 等的问题,但它们都与应用程序有关,而不是系统通用的。有什么想法吗?

答案1

经过与我的托管提供商反复讨论,结果发现我的 DomU 使用的 IP 链(但不是 Dom0)存在 MTU 问题。我想感谢所有在此过程中帮助过我的人,你们的帮助非常宝贵 :)

答案2

这是一个老问题,已经得到解答了,但我们遇到了完全相同的问题,其原因虽然相关,但不同。

关键是嗅探我们边缘路由器上的流量,在那里我们看到了发送到服务器(GitHub.com)的 ICMP 消息,要求碎片化。这会造成连接混乱,包括重新传输、重复 ACK 等等。

在此处输入图片描述

ICMP 数据包中有一个字段,MTU of next hop其值很奇怪,为 1450。通常值为 1500。

在此处输入图片描述

我们检查了路由器,发现其中一个接口(以太网隧道)的 MTU 值就是这个,因此路由器将所有接口的最小 MTU 作为下一跳。一旦我们移除这个接口(它未使用),SSH 握手就会再次开始工作。

答案3

尝试:

 $sudo apt-get --reinstall install openssl libssl0.9.8

答案4

我会尝试使用 openssl s_client 并给它一个随机文件(“任何”文件)只是为了检查问题是否与 /dev/random|urandom 有关,正如 Ben 所说:

openssl s_client -state -connect graph.facebook.com:443 -rand anyfile

请注意,从加密角度来看,以这种方式使用文件非常危险,因此在投入生产之前请务必找到其他解决方案。

相关内容