【发布时间】: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 应用程序是否会出现同样的问题?