python访问HTTPS服务返回WRONG_VERSION_NUMBER错误

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 05:02   21   0

python访问HTTPS服务返回WRONG_VERSION_NUMBER错误

今天又踩了一个坑,记一下。

有一个python客户端访问HTTPS服务请求,返回如下错误:

<urlopen error [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:579)>

怎么也找不到原因,openssl的版本没有问题啊。

python脚本如下:

$ cat client.py 
#!/usr/bin/env python

import ssl, urllib2
import sys

try:
  ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
  ctx.load_cert_chain("tls-cert.pem", "tls-key.pem")
  request = urllib2.Request("https://localhost:9090/service/hello")

  contents = urllib2.urlopen(request, context=ctx).read()
  print contents
  sys.exit(0)
except urllib2.HTTPError,ev:
  print ev
  sys.exit(1)
except urllib2.URLError,ev:
  print ev
  sys.exit(1)
except IOError,ev:
  print ev
  sys.exit(1)

运行结果为:

$ python client.py 
<urlopen error [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:579)>

无法确认这是什么问题引起的。

最后发现真正的原因是server端不是一个HTTPS服务,而是一个HTTP服务,把我给坑惨了,python客户端运行的错误输出信息没有任何这方面的提示,一直在检查openss的版本,以及python的办法,都解决不了。

我猜测原因可能是client端认为这是一个HTTPS服务,所以把从服务端收到的消息按照HTTPS的格式进行了解析,而碰巧针对HTTPS里面的VERSION字段随机对应到了一个值,这个值恰好不是一个有效的VERSION值,所以就报出了这个误导性的错误信息。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP