Python Flask中ssl_context选项之间的区别

时间:2015-04-27 05:53:38

标签: python ssl flask

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

这是documented

ssl_context - 连接的SSL上下文。 ssl.SSLContext,形式(cert_file,pkey_file)中的元组,字符串' adhoc'如果服务器应自动创建一个,或者无以禁用SSL(这是默认值)。

以下是枚举选项:

  1. ssl.SSLContext - 需要证书和密钥文件。
  2. 表单中的元组(cert_file,pkey_file) - 需要证书和密钥文件。
  3. 字符串' adhoc' - 看起来很简单。
  4. 在这些背景下,这些选项之间有什么区别:

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

2 个答案:

答案 0 :(得分:5)

使用前两个选项,您可以提供自己的证书,如果您管理它们,可能(应该)由公认的机构或您的客户签名(如果您的应用程序部署在您的上下文中,则会发生这种情况)可以在每台计算机上安装证书,或者如果您的客户端不是Web浏览器,而是您的应用程序,您可以随身携带证书。)

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

第三个选项将创建一个自签名证书,不保证用户在此事上。

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

总结一下,你有三个选择(你的选项1和2最后是相同的):

  • 选项1& 2,由公认的权威机构签署的证书:公共Web应用程序/网站的唯一良好解决方案。
  • 选项1& 2,每个客户端都部署了您自己的证书(或由您自己的权限签名):当您可以在每个客户端上安装证书时,这是一个很好的解决方案。如果你不得不要求你的客户这样做,那就是一个糟糕的解决方案。
  • 选项3:在实验室中进行测试的良好解决方案。在我能想到的任何其他环境中都是一个可怕的解决方案。

答案 1 :(得分:4)

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