我正在尝试使用基于 python 的 api 从 Ubuntu 14.0.4 系统连接到 API 站点。此 API 与 API 的服务器建立 https 连接(仅使用标准 pythonrequests
调用,带有导致调用所调用 API 方法的参数)。API 的 python 代码不关心 TLS、SSH 等,但依赖于操作系统提供的内容。
当我按照 API 文档进行连接时,出现错误提示
[Errno 1] _ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure.
显然,openssl 正在尝试使用 sslv3,而我尝试使用的服务器不支持该功能。
在某个地方,我看到了以下内容作为诊断建议:
$ openssl s_client -connect bryce.cp.bsd.net:443 -tls1
这会产生相同的握手失败,但会显示以下进一步的信息:
Secure Renegotiation IS NOT supported
这说明了问题的本质。它尝试的第一个方法握手失败,然后无法进行后续尝试。
我认为我需要一个更新版本的 OpenSSL 或者以某种方式配置现有的版本,即非常旧的 OpenSSL v1.0.1f。
Ubuntu 14.0.4 似乎不提供此软件包的升级。所以我必须自己构建并安装它。
我正在寻求有关如何最好地实现此目标的建议。
更新: 我发现运行 openssl 附带的 make 文件非常简单。我还发现它将 openssl 安装到与官方软件包不同的目录中。因此,简单地安装它不会影响我已有的内容。但我该如何告诉 Ubuntu 使用这个新版本,而不是它附带的版本?