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
更像是一个调试器,而不是一个真正的服务器?如果有人能在这里提供适当数量的详细信息,那就太好了。请查看我的最新答案以获取。。最新答案:)