CURL Cipher Suites 坑

下午突然发现 Hostker 主控制系统连接美国某个 API 失效,症状如下
curl -i https://xxxxxxxx/ -v
* About to connect() to xxxxx port 443 (#0)
* Trying x.x.x.x... connected
* Connected to xxxxx (x.x.x.x) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* NSS error -5938
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error

并且在 PHP 代码中大部分 GET 请求是正常的,POST 请求一直返回 false 没有具体错误信息。
用 tcpdump 抓包发现客户端发出 Client Hello 包后服务器直接返回 FIN ACK,意义不明。抓包结果如下图:

此时怀疑是不是机房的防火墙问题,找到另一台境外机器架起内网进行中转测试,发现请求这个接口依旧会直接 FIN ACK,而从中转服务器访问 API 是正常的。由于内网并没有加密,此时怀疑是机房防火墙拦截,上报机房处理,大约一小时后机房确认不是他们拦截。再从中转服务器抓包确认奇怪的 FIN ACK 来自服务器,可以肯定问题出在自己或者目标服务器。

思路陷入死胡同之后把问题转给运维,过一会儿运维说升级 curl 后就正常了……黑人问号???

和小虾米吐槽起这个事,小虾米提醒才发现是 Cipher Suites 的问题。正常的 Client Hello 抓包结果是这样的:

应该是对方服务器升级了,按照 RFC 如果没有合适的 Cipher suite 服务器应该返回 TLS Alert 提醒客户端,而不是像这个服务器这么清真的 FIN ACK。坑坑的 OvQ

CURL Cipher Suites 坑有 1 个评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据