Ubuntu 14.0.4 OpenSSL 1.0.1f 和 TLSv1_2016 的握手错误

Handshake errors with Ubuntu 14.0.4 OpenSSL 1.0.1f and TLSv1_2016

请多多包涵。我不是 SSL 加密专家。我只想使用他们的 API 连接到服务器。我做不到。当我按照文档中的指示使用此 api 时,出现以下错误:

[Errno 1] _ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

这个 API 似乎托管在某处的 AWS 服务器上,它的支持人员向我介绍了这个 AWS document 以及他们的服务器使用的附加信息 TLSv1_2016 .我不确定这是否正确,但这是我被告知的。

此版本的 TLS 不受 Ubuntu 14.0.4 (openssl v1.0.1f) 附带的 OpenSSL 支持。支持 1.2 版。我定期升级我的系统,似乎没有任何支持此协议的已批准 Ubuntu 版本。有人建议我升级,但不清楚升级到什么。

这对我来说完全是希腊语。有人可以告诉我我可以对我的系统进行哪些升级来解决这个问题吗?

UPDATE 安装 openssl 1.1.0g 附带的 Ubuntu-18.04 后问题仍然存在。

大部分来自评论的回答。

问题显然是服务器,就像今天的许多 SSL/TLS 服务器,尤其是像 Cloudfront 这样处理多个域的服务器,需要 SSL/TLS 中的 SNI(服务器名称指示)扩展。这是(并且很容易)用 openssl s_client 检查的,它(与大多数程序不同)有一个选项来控制是否发送 SNI。

您之前没有说过此代码是 Python。 It is Python that links to and invokes OpenSSL. (The OS is not involved in SSL/TLS, only in the lower-level TCP/IP protocols.) According to http://docs.python-requests.org/en/master/community/faq/(在底部)

Python3 and Python 2.7.9+ include native support for SNI in their SSL modules. For information on using SNI with Requests on Python < 2.7.9 refer to this Stack Overflow answer.

链接到 using requests with TLS doesn't give SNI support,其中有几个答案似乎主要包括更新各种内容(即使您提供了 Python 和请求的详细信息,我也无法进行测试你没有)。