我有一个 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");
连接没有成功打开,没有日志输出,open()
也没有调用 WebSocketHandler 的。
如何在 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
标志。