Python Flas中ssl_上下文选项的区别

2024-09-28 23:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

为了在Python Flask中支持https,必须在app.run()命令中指定ssl_context选项。

它就是这样的documented

ssl_context–连接的ssl上下文。ssl.SSLContext、表单中的元组(cert_文件、pkey_文件)、字符串“adhoc”(如果服务器应自动创建一个)或“None”来禁用ssl(这是默认设置)。

以下是枚举选项:

  1. ssl.SSLContext-需要证书和密钥文件。
  2. 形式为(cert_file,pkey_file)的元组需要cert和密钥文件。
  3. 字符串“adhoc”看起来很简单。

在这些情况下,这些选项之间的区别是什么:

  1. 用户体验
  2. 额外模块和文件的安装
  3. 安全

Tags: 文件字符串httpsappsslflaskcert选项
2条回答

3. Security是唯一重要的一个,答案是“永远不要在生产中使用Werkzeug/Flask dev服务器。”有ssl_context选项是为了在测试期间方便,但是生产应用程序应该与Nginx一起使用真正的应用程序和web服务器,如uWSGI,适当地配置Nginx以呈现真实的TLS证书。

使用前两个选项,您可以提供自己的证书,该证书可以(应该)由认可的机构签名,也可以由您的客户端(如果您的应用程序部署在可以在每台计算机上安装证书的上下文中,或者如果您的客户端不是web浏览器而是应用程序,则会发生这种情况你可以把证书和它一起寄出去。

这将显示用户他正在与真正的服务器通信,而不是与试图窃听流量的人通信。

第三个选项将创建一个自签名证书,在这一点上不对用户提供任何保证。

在用户体验方面,当客户端是Web浏览器时,使用自签名证书将引发一个令人担忧的关于证书有效性的消息,并说“严肃的Web站点不会要求您盲目地接受未知证书”。

总而言之,您有三个选项(选项1和2最后相同):

  • 选项1和2,证书由公认的权威机构签署:公共Web应用程序/网站的唯一好的解决方案。
  • 在每个客户机上部署具有您自己的证书(或由您自己的权威机构签名)的选项1和2:在每个客户机上安装证书时是一个很好的解决方案。如果你不得不要求你的客户这么做,这是一个糟糕的解决方案。
  • 选择3:一个在实验室测试的好解决方案。在我能想到的任何其他情况下都是一个糟糕的解决方案。

相关问题 更多 >