无法使用GCE Ubuntu 16.04.1映像中的一台服务器完成SSL握手(但可在其他地方使用)

我正尝试通过SSL连接到swift.ca-ns-1.clouda.ca:8443。 我可以从多个其他机器(包括其他新鲜的16.04.1盒子(不在GCE上))连接到这台服务器,并从其他不是Ubuntu 16.04.1的GCE实例连接到它,但是当我尝试从任何Ubuntu 16.04连接时。 1个GCE实例的SSL握手失败。 我已经从下面的openssl发布了一个示例输出。 请注意,我可以连接到我尝试过的所有其他SSL服务器。 CloudA自己搞不清楚。 有任何想法吗?

% openssl s_client -connect swift.ca-ns-1.clouda.ca:8443 CONNECTED(00000003) write:errno=104 --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 0 bytes and written 305 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : 0000 Session-ID: Session-ID-ctx: Master-Key: Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None Start Time: 1475846555 Timeout : 300 (sec) Verify return code: 0 (ok) --- 

更新 :我已经证实,这只发生在美国中部1区(任何转租也受到影响)。 在我们的east1创build一个实例工作得很好。

写:错误号= 104

SSL握手已读取0个字节并写入305个字节

这意味着

  • TCP连接到服务器是成功的
  • openssl s_client尝试通过发送ClientHello来启动TLS握手
  • 服务器或某些中间件(防火墙,负载平衡器…)导致TCP连接(可能)的RST(errno 104为ECONNRESET )作为对ClientHello

从这些信息中不可能说出是什么导致了RST以及系统发送了什么信息。 但是可以尝试通过一些实验缩小范围:

  • 检查所有16.04.1(工作和非工作)使用相同的openssl版本。 调用openssl version是不够的,因为分发版本回到旧版本,并且版本号不会改变。 使用相反openssl version -a和比较生成时间。 如果他们不一样,确保他们和再次testing。
  • 检查您是否在所有系统上使用相同的IP地址作为目标,即尝试使用具有已知的良好目标IP的s_client
  • 通过隧道连接(例如使用OpenSSH),检查服务器是否与源IP地址有问题,以便它来自已知的良好系统。 如果您不幸运,您的系统IP地址因为之前的所有者的活动而被列入黑名单。