【问题标题】:SSLError: sslv3 alert handshake failureSSLError:sslv3 警报握手失败
【发布时间】:2016-05-26 02:39:37
【问题描述】:

我正在对 branch.io 进行以下调用

import requests
req = requests.get('https://bnc.lt/m/H3XKyKB3Tq', verify=False)

它在我的本地机器上运行良好,但在服务器上却失败了。

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

Openssl 版本:

本地:OpenSSL 0.9.8zg 2015 年 7 月 14 日

服务器:OpenSSL 0.9.8e-fips-rhel5 2008 年 7 月 1 日

Python

本地:2.7.10 服务器:2.7.6

分支 io 服务器连接

Chrome 已验证 DigiCert SHA2 Secure Server CA 颁发了此网站的证书。服务器未提供任何证书透明度信息。

我尝试了 urllib2,但结果是一样的。有什么帮助吗?

【问题讨论】:

  • 你至少需要 OpenSSL 0.9.8o 来处理 sha256 证书,所以你的服务器版本太旧了。
  • 我在 2013 年 2 月 11 日尝试了 OpenSSL 1.0.1e-fips。它给了我同样的错误。
  • 您的 PHP 是否使用该版本的 OpenSSL?有关如何检查的详细信息,请参见此处:stackoverflow.com/questions/18752409/…
  • 它使用 OpenSSL 1.0.0-fips 2010 年 3 月 29 日
  • 这也可能是一个 SNI 问题,因为 openssl s_client -connect bnc.lt:443 不起作用,而 openssl s_client -connect bnc.lt:443 -servername bnc.lt 运行良好。我会说 SHA2 签名证书和 SNI 都可能导致问题,但解决方法是相同的:更新 OpenSSL

标签: python ssl openssl branch.io


【解决方案1】:

Jyo de Lys 已发现问题。问题描述为here,解决方案为here。我做了以下工作:

  1. easy_install pyOpenSSL
  2. easy_install ndg-httpsclient
  3. easy_install pyasn1

如果您在使用 urllib2 时遇到此错误,您还需要升级到 python 2.7.9 或更高版本。

【讨论】:

  • 我还需要:pip install pyasn1,以删除一些“用于 SSL 对等验证的 subjectAltName 检查将被禁用”的警告,但除此之外别无他法,为我节省了很多麻烦。
  • 谢谢,我错过了 ndg-httpsclient !
  • 如果这不能解决问题。将 pyOpenSSL 修复为 0.13 即可
  • 我在使用请求包和 Python 2.7.6 (Linux Mint 17.3) 时遇到了同样的问题/错误,我遵循了这个答案并且错误消失了。谢谢
  • @Félix:您能否描述一下“将 pyOpenSSL 修复为 0.13”的意思,包括如何做到这一点?你的意思是不允许 0.13.1?
猜你喜欢
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 2015-08-29
  • 1970-01-01
  • 2020-09-14
  • 2016-10-10
  • 2016-07-01
相关资源
最近更新 更多