Python / Requests:requests.exceptions.SSLError:[SSL:SSLV3_ALERT_HANDSHAKE_FAILURE]

时间:2017-09-12 19:37:47

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

在使用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请求

1 个答案:

答案 0 :(得分:1)

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

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

根据评论中的其他信息,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。