【问题标题】:URLError: <urlopen error [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:661)>URLError: <urlopen 错误 [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 警报协议版本 (_ssl.c:661)>
【发布时间】:2018-03-28 23:49:09
【问题描述】:

我得到标题中的错误

我有 python 2.7.14 和 OpenSSL 1.0.2k 2017 年 1 月 26 日

ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) #Itried all the other protocols
ctx.check_hostname = False #fails with or without these 2 lines
ctx.verify_mode = ssl.CERT_NONE
resp = urllib2.urlopen(url, context=ctx).read()

更新: 这是网址(敏感数据替换为 ..) https://www.upwork.com/api/hr/v2/teams/../users.json?oauth_consumer_key=..&oauth_nonce=..&oauth_signature_method=HMAC-SHA1&oauth_timestamp=..&oauth_token=..&oauth_version=1.0&tz=gmt&oauth_signature=..

所有密钥和令牌都可以工作,因为我也在 javscript 平台上使用它们,它们在那里工作得很好。 也只需将链接粘贴到浏览器中即可。 但是在python中我不知道如何调试它。任何人都可以请帮忙吗?谢谢,非常感谢

【问题讨论】:

  • 这(很可能)不是任何 URL 的一般行为,而是特定 URL 的行为。您需要提供有问题的 URL,以便其他人可以重现该问题。请注意,协议版本问题不能通过禁用证书验证来绕过。
  • 已更新。我以为我错过了有关使用 urlopen 调用的正确方法的一些信息。我的 ssl 经验为零,而且我的截止日期很紧迫。

标签: python ssl


【解决方案1】:

ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) #试了其他所有协议

没有ssl.PROTOCOL_TLS。例如,ssl.PROTOCOL_TLSv1 不起作用,ssl.PROTOCOL_TLSv1_2 对我有用。更好地使用ssl.create_default_context()

【讨论】:

  • 非常感谢 Ullrich 的回复。 ssl.PROTOCOL_TLSv1_2 和 ssl.create_default_context() 仍然出现相同的错误。顺便说一句,如果它有帮助.. 该项目运行了将近一年,直到我完成了获取新授权令牌的过程。我会尝试看看安装到虚拟环境中是否有帮助。也许它与图书馆混合的东西有关..
  • @emanuelcristianMocean:你真的在使用 TLS 1.2 时遇到同样的错误吗?我使用 TLS 1.0 获得了 tls 警报协议版本,但使用 TLS 1.2 我获得了成功的 TLS 握手,然后出现 403 错误 - 因为我的身份验证信息错误。
  • 是的。我无法在 cmets 中粘贴完整输出,但与以前完全一样。我会尝试在虚拟机中安装一个干净的 python 副本,稍后再回来。
  • 干净的操作系统(oracle 虚拟机上的 win7 32 位),干净的 Python 2.7.14,此行仍然失败并出现完全相同的错误:resp = urllib2.urlopen(url,ssl.create_default_context())。 read() 如果我记录 url 并将其复制到 chrome 我得到想要的 json
  • @emanuelcristianMocean:那么可能有一些 SSL 拦截防火墙在摆弄连接。检查您是否在浏览器中配置了代理。还要检查浏览器是否可以从与您的 Python 代码相同的机器访问该站点。也许提供一个数据包捕获(作为 pcap 文件),以便人们可以看到线路上实际发生的情况。
猜你喜欢
  • 1970-01-01
  • 2017-12-18
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
相关资源
最近更新 更多