python访问HTTPS服务返回WRONG_VERSION_NUMBER错误

python访问HTTPS服务返回WRONG_VERSION_NUMBER错误

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

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


怎么也找不到原因,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 

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

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

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

你可能感兴趣的:(python访问HTTPS服务返回WRONG_VERSION_NUMBER错误)