首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python语言中实现安全的WebSocket (wss://)服务器?

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

Stack Overflow用户
提问于 2011-05-13 23:56:15
回答 5查看 27.4K关注 0票数 17

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

我已经成功地使用gevent和gunicorn作为直接前端获得了正常的WebSockets流,但现在我需要确保它的安全性,并且正在寻找以下其中之一:

  1. 可以为代理到(例如) gunicorn的安全WebSocket连接提供服务的服务器,它侦听不安全的WebSocket连接。
  2. 可以直接为安全WebSocket连接提供服务的框架。我一直在研究Tornado,并相信它可以处理它,但我仍然对建议持开放态度。
  3. 我使用ZeroMQ来实现发布/订阅模式。如果有一个好的用于ZeroMQ的WebSocket协议实现,那就太好了。

速度在这里并不是特别重要,因为连接的数量会很低。但是,数据的完整性很重要。

EN

回答 5

Stack Overflow用户

发布于 2012-12-22 09:20:55

假设您的应用程序在非SSL上正常运行,请将listen call从:

代码语言:javascript
复制
app.listen(args.listen_port, args.listen_interface) 

至:

代码语言:javascript
复制
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"),
    })

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

不要忘记将客户端更改为使用"wss:“

另请注意,如果指定ssl_options,则仍将使用在侦听呼叫中指定的端口。即它不会回复到在端口443上侦听。

票数 7
EN

Stack Overflow用户

发布于 2011-05-15 02:43:18

您可以查看websockify项目。Websockify是一个代理,它允许支持WebSockets的浏览器与原始二进制TCP服务器通信。它通过对进出浏览器的所有流量进行base64编码来实现这一点。然而,这个项目是模块化的,websocket.py文件是一个通用的WebSocket服务器,它被设计为可扩展的(有几个包含的测试展示了这是如何工作的)。如果您的项目不需要base64编码,那么禁用它将是相当容易的。

websockify还包括一个用于与Websockify交互的Javascript库'websock.js‘。如果浏览器没有原生WebSocket支持,它将透明地回退到使用web-socket-js (基于闪存)。

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

免责声明:我做了websockify。

票数 6
EN

Stack Overflow用户

发布于 2011-05-14 07:38:03

看看谷歌支持的pywebsocket项目的standalone websockets server

请注意,该Python模块使用CGIHTTPServer,因此需要对其进行调整以确保其安全性。我在几个月前参与的一个项目中也有类似的需求,所以我创建了standalone.py模块,并删除了与CGI的依赖,但我没有测试过太多的安全连接。

也许您可以导入OpenSSL.SSL并设置一个WebSocketServer,就像在我的脚本中一样。它应该使用正确配置了use_tlsprivate_keycertificateWebSocketRequestHandler,以便实现传输层安全。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5994549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档