我正在尝试用Python实现websocket安全服务器(基于this模块)
在链接中,它表示该模块支持TLS和SSL连接,但不解释如何。
我现在的代码是这样的:
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
import ssl
class SimpleResponder(WebSocket):
def handleMessage(self):
self.sendMessage(self.data)
def handleConnected(self):
print self.address, 'connected'
def handleClose(self):
print self.address, 'closed'
server = SimpleWebSocketServer('', 8000, SimpleResponder)
try:
server.serveforever()
except KeyboardInterrupt:
pass
print "Server ended"
我尝试以与使用HTTP服务器相同的方式实现SSL包装(如此):
server.socket = ssl.wrap_socket (server.socket, certfile='path/to/localhost.pem', server_side=True)
但似乎它不起作用(我得到下一个错误):
AttributeError: 'SimpleWebSocketServer' object has no attribute 'socket'
很明显,SimpleWebSocketServer
类的结构不像SimpleHTTPServer
类。
那么可以我如何实现安全的websocket服务器?
答案 0 :(得分:2)
TLS / SSL示例
1)使用密钥
生成证书openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
2)运行安全TSL / SSL服务器(在这种情况下,cert.pem文件位于 同一目录)
python SimpleExampleServer.py --example chat --ssl 1 --cert ./cert.pem
3)通过提供websocket.html将证书提供给浏览器 通过https。 HTTPS服务器将在本地查找cert.pem 目录。确保websocket.html也在同一目录中 服务器运行的地方。
sudo python SimpleHTTPSServer.py
4)打开Web浏览器: https://localhost:443/websocket.html
5)将ws:// localhost:8000 /更改为wss:// localhost:8000并单击 连接。
注意:如果您在连接时遇到问题,请确保 证书已添加到您的浏览器中以防止异常 您要连接的https://localhost:8000或任何host:端口对 到。
我发现Autbahn|Python非常容易使用。它适用于Twisted和asyncio网络引擎。