我有一个Tornado HTTPServer初始化如下:
ssl_options = {
"certfile": "mycert.crt",
"keyfile": "mykey.key"
}
server = tornado.httpserver.HTTPServer(application, xheaders=True,
ssl_options=ssl_options)
它有一个带有open()
方法的WebSocketHandler。
当我尝试从Chrome 30控制台通过Javascript打开安全的websocket连接时,例如
var sock = new WebSocket("wss://localhost:9001/mywebsocket");
连接未成功打开,没有日志输出,并且未调用WebSocketHandler的open()
。
如何在Tornado中打开并维护与Javascript客户端的安全(SSL)WebSocket连接?
尝试不安全的连接,例如
var sock = new WebSocket("ws://localhost:9001/mywebsocket");
导致Tornado日志中出现以下错误:
2013-10-08 13:59:55,305 tornado.general 820 : SSL Error on 8 ('192.168.149.27', 62851): [Errno 1] _ssl.c:490: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request
同样在这种情况下,连接未成功打开,并且未调用open()
。
附加信息:错误消息中IP之后的数字(上例中的62851)随着每个请求(安全或其他)而增加。我不知道那个号码是什么,但它确实表明该请求至少要到达服务器。
此外,从构造函数中删除ssl_options
并向服务器发出不安全的(ws://
)请求可以解决问题。
正在使用的证书是自签名的。要通过curl与服务器的HTTP端点通信,我必须使用--insecure
标志。
答案 0 :(得分:1)
如果您从javascript控制台启动连接,浏览器将无法向您显示自签名证书警告并让您有机会接受它。如果你先去https://localhost:9001
并在那里接受证书,它有用吗?