Python 2.7 Flask webservice https调用导致ssl错误

Python 2.7 Flask webservice https调用导致ssl错误,python-2.7,ssl,flask,python-requests,Python 2.7,Ssl,Flask,Python Requests,我有基于Flask的Web服务提供REST接口 我们已经编写了从flask.flask继承的webservice类,并且不能在这里提供完整的代码,但是webservice应用程序调用看起来像, app.run(主机=主机,端口=端口,ssl\u context='adhoc) 当我尝试运行GET请求时,会出现SSL错误 File "/opt/debesys/build/x86-64/debug/python/tt/pyrate/test/test_juno_sim.py", line 107

我有基于Flask的Web服务提供REST接口

我们已经编写了从flask.flask继承的webservice类,并且不能在这里提供完整的代码,但是webservice应用程序调用看起来像,
app.run(主机=主机,端口=端口,ssl\u context='adhoc)

当我尝试运行GET请求时,会出现SSL错误

  File "/opt/debesys/build/x86-64/debug/python/tt/pyrate/test/test_juno_sim.py", line 1077, in test_main_page
    resp = requests.get(self.url, headers=self.headers, verify=False)
  File "/opt/debesys/ext/linux/x86-64/release/lib/python2.7/site-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/opt/debesys/ext/linux/x86-64/release/lib/python2.7/site-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/opt/debesys/ext/linux/x86-64/release/lib/python2.7/site-packages/requests/sessions.py", line 456, in request
    resp = self.send(prep, **send_kwargs)
  File "/opt/debesys/ext/linux/x86-64/release/lib/python2.7/site-packages/requests/sessions.py", line 559, in send
    r = adapter.send(request, **kwargs)
  File "/opt/debesys/ext/linux/x86-64/release/lib/python2.7/site-packages/requests/adapters.py", line 382, in send
    raise SSLError(e, request=request)
SSLError: [Errno 1] _ssl.c:507: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
我也尝试过启动应用程序,比如,
app.run(主机=主机,端口=端口,ssl_上下文=('cert.pem','key.pem'))
还将
urllib2
模块用于get请求,而不是
requests
模块

但同样的错误。如果我尝试在没有
ssl\u上下文的情况下启动应用程序,并使用
http
,则成功获得响应

这里我使用的是
headers={'Content-Type':'application/json'}
url=”https://127.0.0.1:{}.格式(端口)

更新

找到解决方案: 在继承Flask之后,我们重写了Flask
run
方法,其中使用了
WSGIServer
,因此我应该使用ssl\u上下文,而不是
ssl\u上下文


希望上述步骤能帮助用户诊断类似问题,从而保留问题。

没有代码,只能猜测


由于错误状态为
unknown protocol
,您可能需要检查是否调用了正确的协议,例如没有调用
HTTPS
而不是
HTTP
,这是在本地环境中开发时的常见错误。

我可能知道发生了什么,即使您应该在堆栈跟踪旁边提供部分代码,以更好地理解问题

SSL例程:SSL23\u GET\u SERVER\u HELLO:未知协议

当OpenSSL在与服务器的握手中收到错误的参数时,会产生此错误。如果服务器使用纯HTTP(没有TLS)应答,则可能发生这种情况。这可能是由于其他各种原因造成的,您的客户机可能不理解TLS版本(库仅支持SSL)或类似的内容

尝试使用
wget
Postman
到url()运行请求。如果您得到响应,则不会启用SSL

固定的

好的,我已经设法复制了您的问题,您没有在ssl模式下运行服务器。运行这个

pip安装pyopenssl

python-m flask run--cert=adhoc

并确保消息正在运行ont,然后退出并使用

python-m flask run--cert=adhoc-p[您的端口]


要在所需端口中运行int,您的猜测是正确的。使用http的wget是成功的。你们能提出解决方案吗?好的,我不知道你们是处于开发模式还是生产模式。如果您正在开发中,请尝试此方法。如果不是,您可能需要在Apache/Nginx或其他web服务器中启用此方法。请告诉我,这是否是将其包含在主响应中的正确解决方案。我处于开发模式,并参考了同一个博客,这就是为什么在ssl_上下文中尝试使用pem文件的原因哦,对不起,我忘记了这一部分,让我查一下。
[shrishinde@localhost debesys]$ wget https://127.0.0.1:47855/
--2020-02-19 13:03:25--  https://127.0.0.1:47855/
Connecting to 127.0.0.1:47855... connected.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Unable to establish SSL connection.
[shrishinde@localhost debesys]$ wget http://127.0.0.1:47855/
--2020-02-19 13:03:28--  http://127.0.0.1:47855/
Connecting to 127.0.0.1:47855... connected.
HTTP request sent, awaiting response... 200 OK
Length: 31 [text/html]
Saving to: “index.html”

100%[=====================================================================================================================================================================>] 31          --.-K/s   in 0s      

2020-02-19 13:03:28 (6.25 MB/s) - “index.html” saved [31/31]

[shrishinde@localhost debesys]$