【问题标题】:Difference between ssl_context options in Python FlaskPython Flask 中 ssl_context 选项之间的区别
【发布时间】:2015-07-05 11:01:05
【问题描述】:

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

就是documented

ssl_context – 连接的 SSL 上下文。一个 ssl.SSLContext,一个形式为 (cert_file, pkey_file) 的元组,如果服务器应该自动创建一个字符串 'adhoc',或者 None 来禁用 SSL(这是默认设置)。

以下是列举的选项:

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

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

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

【问题讨论】:

    标签: python ssl flask


    【解决方案1】:

    3. Security 是唯一重要的,答案是“从不在生产中使用 Werkzeug/Flask 开发服务器。” ssl_context 选项是为了方便测试,但生产应用程序应该使用真实的应用程序和 Web 服务器,例如 uWSGI 和 Nginx,适当地配置 Nginx 以提供真实的 TLS 证书。

    【讨论】:

      【解决方案2】:

      对于前两个选项,您可以提供自己的证书,如果您管理它们,则可能(应该)由公认的权威机构或您的客户签署(如果您的应用程序部署在您可以在每台计算机上安装您的证书,或者如果您的客户端不是 Web 浏览器而是您的应用程序,您可以将证书与它一起发送。

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-04-01
        • 2014-07-21
        • 1970-01-01
        • 2019-08-02
        • 2016-11-09
        • 2019-08-16
        • 2021-12-02
        • 2015-07-12
        • 2017-07-30
        相关资源
        最近更新 更多