我被Firefox卡住了。我不能让WebSocket在上面工作。我使用Tornado WebSocket,并通过下面的代码初始化它:
app = Application([(r'/mypath/ws', WSHandler)])
http_server = HTTPServer(app, ssl_options={
"certfile": "~/certs/websocket.crt",
"keyfile": "~/certs/websocket.key"
})
http_server.listen("443")
我在JavaScript端初始化它,如下所示:
var WS = new WebSocket("wss://websocket.localhost/mypath/ws");
这段代码在Chrome上运行良好,同时,我自己创建了证书并在HTTPS下运行页面。Firefox一直在说:
Firefox can't establish a connection to the server at wss://websocket.localhost/mypath/ws.
我谷歌了一下,发现了太多的想法,但没有一个对我有用:(
任何帮助将不胜感激。
7条答案
按热度按时间qcbq4gxm1#
如果是自签名证书,浏览器不会显示接受证书的对话框,如果它只在WebSocket中使用。
您必须首先访问请求的url以查看并接受证书警告,然后才能创建安全WebSocket。
例如,如果你的WebSocket url是:
wss://localhost:44300/OpenWebSocket
然后访问:
https://localhost:44300/OpenWebSocket
并接受证书警告
hs1ihplo2#
如果是自签名证书,浏览器不会显示接受证书的对话框,如果它只在WebSocket中使用。您必须首先访问同一服务器上的正常页面以查看并接受证书警告,然后才能创建安全WebSocket。
1qczuiv03#
我通过ProxyPass解决了这个问题。我用Tornado创建了一个不安全的WebSocket服务器,并在一个特定的端口(如3232)上运行它:
然后我在Apache conf中编写了一个proxypass,并使用mod_proxy_wstunnel:
我在前端创建WebSocket客户端,如下所示:
在这种情况下,我可以使用https在安全连接上创建一个连接,我的端口是81,我的proxypass将任何WebSocket请求重定向到本地侦听端口3232。这不是一个确切的解决方案,主要是一个变通方案。但对我来说很好。
h79rfbju4#
尝试在firefox中打开此url https://websocket.localhost/mypath/ws并首先接受证书。
eni9jsuy5#
我通过在Firefox的高级首选项中添加证书异常解决了这个问题。
0s7z1bwu6#
我碰巧以错误的方式创建了我的自签名证书,留下了Basic Constraint -> Certificate Authority = Yes。
您可以通过在firefox中访问
about:preferences#privacy
来检查,然后单击查看证书...按钮。您将在服务器选项卡上看到您的网站/Web应用及其证书的列表。单击您的服务器,然后单击**查看...**按钮。将打开一个新窗口/选项卡,其中包含证书的详细信息。向下滚动以找到“基本约束”部分,在那里您将看到您是否生成了声明自己为证书颁发机构(CA)的证书。如果是这样的话,您必须在没有该约束的情况下再次生成证书(CA=false)
11dmarpk7#
我为这件事抓狂了好一阵子。根据不同的Web浏览器,我收到了各种各样的神秘错误消息,所有这些都让它听起来像是关于证书异常的事情。我已经在Firefox和Chrome中做了例外,
原来我在JavaScript中的子协议字符串中有一个错字!
纠正子协议字符串使一切都更好。有关WebSockets和使用子协议的更多信息:https://developer.mozilla.org/en-US/docs/Web/API/WebSocket