【问题标题】:Python/Requests: requests.exceptions.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE]Python/请求:requests.exceptions.SSLError:[SSL:SSLV3_ALERT_HANDSHAKE_FAILURE]
【发布时间】:2018-02-21 08:58:27
【问题描述】:

在使用 MacOS X 的 Python 中,尝试向网站发出 POST 请求,但出现以下错误 post_response = session.post(post_url, data=post_payload, headers=post_headers)

Traceback (most recent call last):
  File "web_requests.py", line 424, in <module>
    main()
  File "web_requests.py", line 340, in main
    post_response = session.post(post_url, data=post_payload, headers=post_headers)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 535, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)

可能是什么问题?

提前感谢您,一定会支持/接受答案

编辑

特定于 Python 中的 POST 请求

【问题讨论】:

  • @OluwafemiSule 它与我的特定问题没有具体关系
  • @OluwafemiSule 不一样
  • “特定于 POST 请求”是什么意思? GET 请求不会出现 SSLError 吗?
  • 此问题与此处的许多其他问题相似,但细节太少,无法真正了解问题的多种可能性。请提供 URL、python 的完整版本和使用的 openssl 库 (python -c 'import ssl; print ssl.OPENSSL_VERSION')。我的猜测是,问题是由 MacOSX 附带的非常旧的 OpenSSL 版本 0.9.8 引起的,不支持现代密码和 TLS 协议版本 - 但这只是众多可能性之一。
  • @SteffenUllrich Python 2.7.10, OpenSSL 0.9.8zg 14 July 2015

标签: python python-2.7 ssl openssl python-requests


【解决方案1】:

根据 SSLLabs 对此站点报告的评论中的附加信息,它仅支持 TLS 1.2:

TLS 1.2 Yes   
TLS 1.1 No   
TLS 1.0 No   
SSL 3   No 

根据 cmets 中的另一个信息,OpenSSL 版本是 0.9.8:

.. OpenSSL 0.9.8zg 2015 年 7 月 14 日

由于 OpenSSL 0.9.8 仅支持 TLS 1.0,尤其不支持 TLS 1.2,因此客户端和服务器之间没有通用的 TLS 协议。因此,握手失败。

解决问题的方法是将 Python 使用的 OpenSSL 版本从非常旧的版本升级到至少 OpenSSL 1.0.1。例如,请参阅 Updating openssl in python 2.7 了解更多信息或使用 Anaconda Python,它预装了许多模块,还包括当前版本的 OpenSSL。

【讨论】:

  • 你介意展示如何在 python 2.7 中更新 openssel 吗?尝试了以下,但到目前为止没有运气。
  • @JoKo:这里有很多帖子展示了如何在 Python 中更新 OpenSSL(参见 jww 的 cmets),所以我不会再添加其他帖子了。如果你想要它简单,只需按照我的建议使用 Anaconda Python。
  • 尝试了第一个答案(使用sudo pip install --upgrade pyOpenSSL)并检查了python版本,它已经更新到最新但当我这样做时:import sslprint ssl.OPENSSL_VERSION,它仍然是@987654327 @.
  • @JoKo: 1. 您的原始问题得到了正确回答(应该这样标记)。 2. 询问在 Python 中更新 OpenSSL 是一个新问题,不应在评论中提出。 3. 其他问题后面的问题不在这里讨论。 4. 为什么不按照建议安装 Anaconda Python 来避免麻烦?
  • Anaconda 只是一堆模块的包吗?
猜你喜欢
  • 2012-12-15
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多