我正在尝试通过 curl 向仅支持 TLS 1.2、TLS 1.1 和 TLS 1.0 的服务器发出 POST 请求。但是,即使我尝试指定需要 TLS 而不是默认 SSL v. 3(添加 ---tlsv1),我也会收到以下响应:
curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
这是我正在使用的 curl 版本:
curl 7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
解析 URL 时不存在防火墙问题。
我怎样才能使 POST 成功?
更新:我也尝试使用 Python 发出请求,试图找出问题所在。该 URL 是内部的,因此我无法分享,但如果能帮助我解决配置问题,我将不胜感激。以下是 Python 错误:
urllib2.URLError: <urlopen error (1, 'error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure')>
答案1
我怎样才能使 POST 成功?
如果不知道确切的 URL,很难判断问题是什么。但考虑到你使用的 curl 版本,可能是服务器需要服务器名称指示 (SNI)您正在使用的旧版本 curl 不支持此功能。
答案2
“握手”错误表示客户端和服务器无法就如何设置 HTTPS 所需的安全通道达成一致。您使用的 OpenSSL 版本非常旧,并且仅能理解 sslv3 之前的 SSL,这是服务器要求的最低标准。因此出现“sslv3”错误 - 它通知您它尝试使用 SSL v3(低于 TLS v1)但未能获得有意义的响应。
如果您没有升级到较新版本的 OpenSSL,那么您就倒霉了,即使这样,curl 版本可能也需要升级才能处理较新的 TLS 版本。