如何强制gevent WSGIServer同时监听HTTP和HTTPS

问题描述 投票:0回答:1

我可以使用 HTTPS 访问应用程序,但在将其转换为 https 后如何将其重定向以侦听 http。

当我尝试使用 http 访问它时,出现以下错误。

    ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:1056)
2020-03-30T15:58:35Z <Greenlet at 0x1d7ca90ce18: _handle_and_close_when_done(<bound method StreamServer.wrap_socket_and_handle , <bound method StreamServer.do_close of <WSGIServer, (<gevent._socket3.socket [closed]  object, fd=-1, )> failed with SSLError

我的跑步.py

from search_app import app
from gevent.pywsgi import WSGIServer
import os


if __name__ == '__main__':
    http_server = WSGIServer(('127.0.0.1', 5000), app, keyfile=f'{os.path.dirname(app.instance_path)}\\private.key', certfile=f'{os.path.dirname(app.instance_path)}\\xyz.crt')
    http_server.serve_forever()
python-3.x flask gevent gevent-socketio wsgiserver
1个回答
0
投票

试试这个:

from gevent.pywsgi import WSGIServer
from ssl import PROTOCOL_SSLv23
from gevent import sleep as gevent_sleep, ssl

Flask 应用程序代码在这里

if __name__ == "__main__":

    http_server = WSGIServer(("0.0.0.0", 80), app, log=None, error_log=None, backlog=None)
    http_server.start()

    https_server = WSGIServer(("0.0.0.0", 443), app, keyfile='./apps/server.key', certfile='./apps/server.crt',
                              log=None, error_log=None, backlog=None, ssl_version=PROTOCOL_SSLv23,
                              do_handshake_on_connect=False)

    try:
        https_server.start()
    except (ssl.SSLError,ssl.SSLEOFError) as err:
        if err.args[1].find("sslv3 alert") == -1:
            raise


    while True:
        gevent_sleep(60)
© www.soinside.com 2019 - 2024. All rights reserved.