【问题标题】:Handshake errors with Ubuntu 14.0.4 OpenSSL 1.0.1f and TLSv1_2016Ubuntu 14.0.4 OpenSSL 1.0.1f 和 TLSv1_2016 的握手错误
【发布时间】:2018-05-04 17:04:40
【问题描述】:

请多多包涵。我不是 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 的附加信息。我不确定这是否正确,但这是我被告知的。

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

这对我来说都是希腊语。有人能告诉我升级我的系统可以解决这个问题吗?

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

【问题讨论】:

  • TLSv1_2016 不是 TLS 版本,但根据该页面,Cloudfront 中的策略 映射到多个 TLS 版本和密码套件,OpenSSL 1.0.1 支持其中的足够多。除了协议版本和密码套件之外,hello 上的 handshake_failure 还可能导致其他原因,这是您的代码还是其他人的封闭库?如果是后者调试会比较难。尝试与openssl s_client -connect $host:$port 连接,如果被拒绝,请尝试添加-servername $host;如果其中任何一个有效,则不是您的 OpenSSL 有问题,而是他们的库。 ...
  • ... 如果服务器在 443 上可用(并且是公共的,Cloudfront 显然是)但您不能让我们自己寻找,请尝试通过 ssllabs.com/ssltest 进行分析 - 方便测试并有帮助地描述了很多可能的问题。
  • 好的,openssl s_client -connect $host:$port -servername $host 工作
  • 我认为这一定意味着有一些 openssl 配置允许建立此连接,但这不是用于随机连接尝试的默认配置。也许另一个版本会有所帮助,即使问题也可以通过重新配置服务器来解决,
  • 如果 s_client 在没有 -servername 的情况下失败并成功,则服务器需要 SNI 扩展(服务器名称指示)。近年来,许多服务器需要或更喜欢 SNI,它有时是在共享服务器上处理多个域的唯一方法,就像 CloudFront 这样的 CDN 必须的那样。 OpenSSL(至少回到 0.9.8)可以发送 SNI,但前提是调用 OpenSSL 的代码指定了它;你还没有说那是你的代码还是“他们的”。如果“他们的”并关闭,请查看是否有更新版本或任何相关的配置选项。 ...

标签: amazon-web-services ssl openssl ubuntu-14.04


【解决方案1】:

大部分来自 cmets。

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

您之前没有说过这段代码是 Python。 It is Python that links to and invokes OpenSSL.(操作系统不涉及SSL/TLS,只涉及底层TCP/IP协议。)根据http://docs.python-requests.org/en/master/community/faq/(在底部)

Python3 和 Python 2.7.9+ 在其 SSL 模块中包含对 SNI 的原生支持。有关在 Python

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

【讨论】:

  • 就是这样。我以前没有听说过 SNI,也不了解带有 servername 参数的 openssl 测试的重要性。一旦我知道它叫什么,就很容易用谷歌搜索 SNI 并找到答案。
猜你喜欢
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 2020-08-23
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多