【问题标题】:Can not established Websocket secure connection on Firefox无法在 Firefox 上建立 Websocket 安全连接
【发布时间】:2014-07-09 15:00:04
【问题描述】:

我被 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.

我用谷歌搜索,发现太多想法,但没有一个对我有用:(

任何帮助将不胜感激。

【问题讨论】:

  • 您自己创建了证书...您是否将其添加到浏览器的受信任证书列表中?
  • 我不应该将自己的证书手动添加到浏览器,因为我的客户不会这样做。我必须找到一个永久的解决方案。
  • FatihKaratana 试试 konghou 说的,如果可行,那么您可能需要从受信任的颁发者那里购买证书。

标签: javascript python firefox websocket tornado


【解决方案1】:

如果它是自签名证书,如果仅在 websocket 中使用,浏览器将不会显示接受证书的对话框。您必须先访问同一服务器上的正常页面才能看到并接受证书警告,然后才能创建安全的 websocket。

【讨论】:

【解决方案2】:

如果它是自签名证书,如果仅在 websocket 中使用,浏览器将不会显示接受证书的对话框。
您必须首先访问请求的 url 以查看并接受证书警告,然后您才能创建安全的 websocket。

例如,如果您的 websocket url 是:
wss://localhost:44300/OpenWebSocket
然后访问:
https://localhost:44300/OpenWebSocket
并接受证书警告

【讨论】:

    【解决方案3】:

    我通过 ProxyPass 解决了我的问题。我使用 Tornado 创建了一个不安全的 Websocket 服务器,并在特定端口(例如 3232)上运行它:

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

    然后我在我的 Apache conf 中编写了一个 proxypass 并使用 mod_proxy_wstunnel:

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

    然后我像这样在前端创建 Websocket 客户端:

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

    在这种情况下,我可以在与 https 的安全连接上创建连接,并且我的端口是 81,并且我的 proxypass 将任何 Websocket 请求重定向到本地侦听的端口 3232。这不是一个确切的解决方案,主要是一种解决方法。但对我来说效果很好。

    【讨论】:

      【解决方案4】:

      尝试在firefox中打开这个urlhttps://websocket.localhost/mypath/ws并先接受证书。

      【讨论】:

        【解决方案5】:

        我已经解决了这个问题,在 Firefox 的高级首选项中添加了一个证书例外。

        【讨论】:

        • 你可能会通过这种方式解决问题,但我没有机会强迫我的用户这样做:(这对我来说是关键点。这就是我找到方法的原因解决方法。
        【解决方案6】:

        我碰巧以错误的方式创建了我的自签名证书,离开了 Basic Constraint -> Certificate Authority = Yes。

        您可以通过在 Firefox 中访问 about:preferences#privacy 来检查,然后单击 查看证书... 按钮。您将在 服务器 选项卡上看到您的网站/网络应用程序及其证书的列表。点击您的服务器,然后点击查看...按钮。

        将打开一个新窗口/选项卡,其中包含证书的详细信息。向下滚动以找到“基本约束”部分,您将在此处查看是否生成了声明自己为证书颁发机构 (CA) 的证书。如果是这样,您必须在没有该限制的情况下再次生成证书(CA=false)

        【讨论】:

        • 完成此操作后,我的 Web 应用程序在 HTTPS 中运行良好,我的 Websocket 服务器使用 WSS://,无需任何代理或其他技巧。
        【解决方案7】:

        我在这个头发上拉了一会儿。根据不同的 Web 浏览器,我收到了各种神秘的错误消息,这一切听起来都像是证书异常。我已经在 Firefox 和 Chrome 中做了例外处理,

        原来我的 Javascript 中的子协议字符串有错字!

        更正子协议字符串使一切变得更好。 有关 WebSockets 和使用子协议的更多信息:https://developer.mozilla.org/en-US/docs/Web/API/WebSocket

        【讨论】:

          猜你喜欢
          • 2019-09-15
          • 2016-02-09
          • 1970-01-01
          • 1970-01-01
          • 2012-07-13
          • 1970-01-01
          • 2014-11-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多