Python 2.7 Flask webservice https调用导致ssl错误
我有基于Flask的Web服务提供REST接口 我们已经编写了从flask.flask继承的webservice类,并且不能在这里提供完整的代码,但是webservice应用程序调用看起来像,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
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之后,我们重写了Flaskrun
方法,其中使用了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]$