python - Tornado WebSocketHandler 不会响应 SSL 请求

标签 python ssl websocket tornado

我有一个像这样初始化的 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 标志。

最佳答案

如果您从 javascript 控制台启动连接,浏览器没有机会向您显示自签名证书警告并让您有机会接受它。如果您先转到 https://localhost:9001 并在那里接受证书,是否有效?

关于python - Tornado WebSocketHandler 不会响应 SSL 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19255369/

相关文章:

sockets - socket.io 是否将消息排队到断开连接的客户端?

python - 按指定未排序顺序的第三个列表对列表列表进行排序

python - 在计算机之间迁移 virtualenv 和 Github

architecture - CQRS 和 WebSocket

javascript - 为 websocket 引入中间件代理时响应热重载中断

ssl - 尝试使用 TLS 连接到 LDAP 时出错 'LDAP Result Code 201 "ErrorNetwork": Invalid packet format'

python - 如何在shell脚本中执行python3程序

python - 如何将数据帧行分组到pandas groupby列表中

ssl - drupal 控制台命令上的 GuzzleHttp 异常

ssl - 如何在II7上安装SAN SSL证书?