javascriptpythonfirefoxwebsockettornado

Can not established Websocket secure connection on Firefox


I am stuck with Firefox. I could not make WebSocket work on it. I use Tornado Websocket and I initialized it by code below:

app = Application([(r'/mypath/ws', WSHandler)])
http_server = HTTPServer(app, ssl_options={
                "certfile": "~/certs/websocket.crt",
                "keyfile": "~/certs/websocket.key"
            })
http_server.listen("443")

And I initialized it on Javascript side like this:

var WS = new WebSocket("wss://websocket.localhost/mypath/ws");

This code works fine on Chrome, meanwhile, I created the cert by myself and run the page under HTTPS. But Firefox keeps saying that:

Firefox can't establish a connection to the server at wss://websocket.localhost/mypath/ws.

I google it and found too many thoughts but none of'em worked for me :(

Any help will be appreciated.


Solution

  • I solved my problem via ProxyPass. I created a non-secure Websocket server with Tornado and run it on a specific port such as 3232:

    app = Application([(r'/ws/', WSHandler)])
    ws_server = HTTPServer(app)
    ws_server.listen("3232")
    

    Then I've written a proxypass in my Apache conf and use mod_proxy_wstunnel:

    ProxyPass /ws/ ws://127.0.0.1:3232/ws/
    ProxyPassReverse /ws/ ws://127.0.0.1:3232/ws/
    

    And I create Websocket client on frontend like this:

    var WS = new WebSocket("wss://websocket.localhost:81/ws/")
    

    In this case I can create a connection on a secure connection with https and my port is 81 and my proxypass redirect any Websocket request to locally listened port 3232. It is not a exact solution mostly like a workaround. But it works fine for me.