【问题标题】:Flask SSL receiving garbage requestsFlask SSL 接收垃圾请求
【发布时间】:2017-11-16 02:14:55
【问题描述】:

我有一个带有一些端点的基本 Flask 服务器设置。我正在尝试使用 curl 进行测试(我已经从 localhost 和远程都尝试过,结果是一样的)。

如果我通过 http 卷曲路径,效果很好。如果我通过 https 执行此操作,请求看起来像垃圾(见下文)并且 curl 返回“curl:(35)gnutls_handshake()失败:收到了意外的 TLS 数据包。”

通过 https 收到的请求通常类似于:

136.152.142.32 - - [16/Nov/2017 01:32:56] code 400, message Bad request syntax ('\x16\x03\x01\x00\xe3\x01\x00\x00\xdf\x03\x03Z\x0c\xea\xcf\rG\x12,\xea}\xc4\x17n\xb7\x0c\x0b\xea\xdbM\x87n\xf3\x95\xa7(\x15+\xb5lyzY\x00\x00n\x00\xff\xc0,\xc0+\xc0$\xc0#\xc0')
136.152.142.32 - - [16/Nov/2017 01:32:56] "??Z
G,?}?n?           

                        ??

我通过简单地将 ssl_context 添加到我的烧瓶应用程序来添加 SSL 功能。

if __name__ == '__main__':
    context = ('fullcert.pem', 'privkey.pem')
    app.run(debug=False, ssl_context=context)

密钥由 CA 签名并在类似的节点应用程序中正常工作(我正在尝试将该节点应用程序转换为 python/flask)。

我已经尝试过从头开始重新安装,但没有成功。

这是托管在 DigitalOcean 上的,以防有人知道他们所做的一些奇怪的默认配置可能会导致这种情况。我专门打开了运行应用程序的端口。

是否有人对可能导致问题的原因有任何其他建议?

【问题讨论】:

  • "如果我通过 http 卷曲路径",如果您正确设置了证书,您应该无法做到这一点。从您的日志来看,Flask 似乎正在作为普通 HTTP 服务器进行侦听,并且根本没有使用 TLS(这就是为什么 curl 的 HTTPS 请求对它没有意义的原因)。使用debug=True 运行您的应用程序会产生什么结果?
  • 我想了想,我看到一些帖子似乎表明这可能是由于在同一端口上运行的 HTTP 和 HTTPS 服务器之间的某种冲突引起的,但我没有发现任何修复。
  • 使用 debug=True 运行会产生基本相同的垃圾输出。
  • 更新:如果我删除与 SSL 相关的所有内容,它会给我相同的输出。它基本上似乎甚至没有尝试使用 SSL。
  • Flask 启动时是否打印出“Running on https://...”?一个完全最小的 10 行 Flask 应用程序是否会出现同样的问题?

标签: python ssl flask https


【解决方案1】:

我将继续将此归结为 Flask 开发服务器的某种问题。我使用与 Apache 完全相同的代码部署了我的应用程序(具体来说,我遵循了这个方便的指南:https://www.digitalocean.com/community/tutorials/how-to-deploy-a-flask-application-on-an-ubuntu-vps)并且它工作正常。

【讨论】:

    猜你喜欢
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2015-02-03
    • 2016-01-04
    相关资源
    最近更新 更多