python - Python Flask 中 ssl_context 选项的区别

标签 python ssl flask

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

documented因此:

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

下面是枚举的选项:

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

这些上下文中的这些选项有什么区别:

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

最佳答案

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

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

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

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

总而言之,你有三个选项(你的选项 1 和 2 最后是一样的):

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

关于python - Python Flask 中 ssl_context 选项的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29888168/

相关文章:

python 2.7 : Format a list within a list using for loops

ios - Maximo anywhere - 如何为 applicationcenter 安装证书以便在 iOS 上安装应用程序?

postgresql - 无法删除 staging_database:#<PG::ConnectionBad: FATAL: no pg_hba.conf

python - Node js vs Django vs Flask用于从python流式传输多个视频

python - Django 的语言环境文件安装在奇怪的地方

python - 我如何格式化命令参数,它们本身是一组带有 Python 子进程模块的命令?

python - 如何验证pandas.read_csv读取的csv数据?

ios - 从 OSX 复制 p12 证书,应用程序在调用 Web API 时将使用该证书

python - Flask 登录 - is_authenticated 和 is_anonymous 不反射(reflect)登录/注销

python - 类型错误 : get_bind() got an unexpected keyword argument