无法与来自 GCE Ubuntu 16.04.1 映像的一台服务器完成 SSL 握手(但在其他任何地方都有效)

Bra*_*don 4 ssl openssl google-compute-engine

我正在尝试通过 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)
---
Run Code Online (Sandbox Code Playgroud)

更新:我已经确认这只发生在 us-central1 区域(任何转信也会受到影响)。在 us-east1 中创建一个实例效果很好。

Ste*_*ich 9

write:errno=104
...
SSL 握手已读取 0 个字节并写入 305 个字节

这意味着

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

从这些信息中无法判断是什么导致了 RST 以及是什么系统发送了它。但是可以尝试通过一些实验来缩小范围:

  • 检查所有 16.04.1(工作和非工作)使用相同的 openssl 版本。调用openssl version是不够的,因为发行版向后移植到旧版本并且版本号没有改变。改用openssl version -a并比较构建时间。如果它们不相同,请确保它们相同并再次测试。
  • 检查您在所有系统上为目标使用相同的 IP 地址,即尝试使用s_client已知良好的目标 IP。
  • 通过隧道连接(例如使用 OpenSSH)来检查服务器的原始 IP 地址是否有问题,以便它源自已知良好的系统。如果您不走运,您的系统 IP 地址由于前任所有者的活动而在某个黑名单上。