Python 使用通过openssl生成的自签名证书在Flask中测试HTTPS

Python 使用通过openssl生成的自签名证书在Flask中测试HTTPS,python,ssl,flask,Python,Ssl,Flask,我刚刚运行了以下命令来生成自签名证书: openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365 在执行命令之后,我回答了一些关于我的位置等的问题。在生成证书时没有错误。然后我将app.run(ssl_context=('cert.pem','key.pem'))添加到我的Flask应用程序中 from flask import Flask app = Flask(__name__) @

我刚刚运行了以下命令来生成自签名证书:

openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
在执行命令之后,我回答了一些关于我的位置等的问题。在生成证书时没有错误。然后我将
app.run(ssl_context=('cert.pem','key.pem'))
添加到我的Flask应用程序中

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    """ Home page of the website """
    return render_template('index.html')


... Some other functions ...


if __name__ == "__main__":
    app.run(ssl_context=('cert.pem', 'key.pem'))
问题是没有通过HTTPS传递任何内容。当我运行应用程序时,我得到:

$ flask run
 * Running on http://0.0.0.0:5000/
我可以使用HTTP访问页面,但当我尝试使用HTTPS时,我的浏览器出现以下错误:

An error occurred during a connection to XXXXXXX.XXX.edu:5000. 
SSL received a record that exceeded the maximum permissible length.
Error code: SSL_ERROR_RX_RECORD_TOO_LONG 
我的服务器上出现以下错误:

code 400, message Bad HTTP/0.9 request type ('\x16\x03\x01\x00\xbd\x01\x00\x00\xb9\x03\x03\xbc\x1c\xc6q#\xdcr')
为什么我不能使用HTTPS查看内容


免责声明:我知道如果想要进行生产级编码,他们应该使用nginx或gunicorn来提供HTTPS。为了测试起见,我目前正在尝试使用Flask。

您的确切代码在Python 2.7.12和Python 3.5.2中运行良好

另外,从服务器错误中我可以看出,您的服务器希望是一个普通的HTTP请求,而不是TLS握手

\x16\x03\x01..
是一个ClientHello数据包的开始,它说嘿,服务器,让我们启动一个TLS通道,这里是一些加密位

您的服务器似乎试图将其解释为HTTP请求,这就是您看到
HTTP400错误请求的原因。从您在评论中发布的CLI输出中可以看出这一点:

当应用程序实际启动时,它会显示
正在运行http://0.0.0.0:5000/

注意
http
而不是
https

长话短说,Python/Flask安装有问题。尝试从头重新安装Python

更新 我错过了你说你正在使用
flask run
而不是
python app.py
运行的部分。似乎只有前者能产生TLS侦听器

要么
flask run
无法执行TLS,要么我们需要传入一个未记录的参数,这将毫无意义

更新#2
答案就在这里-

当我使用
python app.py在服务器上运行flask应用程序时,我得到了正确的响应--
在服务器上运行https://127.0.0.1:5000/
但是当我使用flask run--host=0.0.0.0运行它时,它不工作。我尝试重新安装python.Ooops,我错过了这一部分-是的,如果我运行flask,它会监听
http
。不知道,也许是故意的?找不到启动TLS的参数。我相信
flask run
更像是一个调试器,而不是一个真正的服务器?如果有人能在这里提供适当数量的详细信息,那就太好了。请查看我的最新答案以获取。。最新答案:)