如何在Python中实现安全的WebSocket(wss://)服务器?

Bli*_*ixt 17 python websocket

我想提供由于敏感数据而必须安全加密的实时流.

我已成功使用gevent和gunicorn作为直接前端获得正常的WebSockets流式传输,但现在我需要使其安全,并且我正在寻找以下任何一种:

  1. 一个服务器,可以提供安全的WebSocket连接,代理(例如)gunicorn,用于侦听非安全的WebSocket连接.
  2. 一个可以直接提供安全WebSocket连接的框架.我一直在关注龙卷风并相信它可以处理它,但我仍然愿意接受建议.
  3. 我使用ZeroMQ作为PUB/SUB模式.如果ZeroMQ有一个很好的WebSocket协议实现,那就太好了.

速度在这里并不重要,因为连接数量很少.但是,数据的完整性很重要.

nor*_*man 7

假设您的应用程序在非SSL Tornado WebSockets上正确运行,请更改listen调用:

app.listen(args.listen_port, args.listen_interface) 
Run Code Online (Sandbox Code Playgroud)

至:

app.listen(args.listen_port, args.listen_interface, ssl_options={ 
        "certfile": os.path.join(lib_dir, "mydomain.crt"),
        "keyfile": os.path.join(lib_dir, "mydomain.key"),
    })
Run Code Online (Sandbox Code Playgroud)

其中"mydomain.crt"和"mydomain.key"是您通常的SSL证书文件,lib_dir是它们所在的目录.

不要忘记更改客户端以使用"wss:"

另请注意,如果指定ssl_options,仍将使用您在listen调用中指定的端口.即它不会恢复到侦听端口443.


kan*_*aka 6

您可以查看websockify项目.Websockify是一个代理,允许支持WebSockets的浏览器与原始二进制TCP服务器通信.它通过base64编码进出浏览器的所有流量来完成此操作.但是,该项目是模块化的,websocket.py文件是一个通用的WebSocket服务器,旨在扩展(还有一些包含的测试,显示它是如何工作的).如果您的项目不需要,那么禁用base64编码会相当容易.

Websockify还包括一个Javascript库'websock.js',旨在与websockify进行交互.如果浏览器没有本机WebSocket支持,它将透明地回退到使用web-socket-js(基于Flash).

Websockify支持安全(TLS/wss)连接,并且还能够在同一端口上内联回答Flash安全策略请求.

免责声明:我做了websockify.


sco*_*fey 3

看一下Google 支持的pywebsocket项目的独立 websockets 服务器。

请注意,此 Python 模块使用CGIHTTPServer,因此您需要调整它以确保其安全。几个月前我参与的一个项目也有类似的要求,所以我分叉了standalone.py模块并删除了与CGI 内容的依赖关系,但我还没有对安全连接进行太多测试。

也许您可以像我的脚本中那样导入OpenSSL.SSL并设置 a 。WebSocketServer它应该使用WebSocketRequestHandler具有正确配置的use_tls,private_keycertificate来实现 TLS(传输层安全性)。

阅读源代码。我认为您可以扩展它来满足您的需求。