【发布时间】:2012-10-02 01:08:27
【问题描述】:
我们正在尝试让 Socket.io 闪存套接字通过 HTTPS/WSS 在 Internet Explorer 9 中工作。 flashsockets 通过 HTTP 工作,但是 HTTPS 给我们带来了问题。我们使用的是 socket.io 0.8.7 版和 socket.io-client 0.9.1-1 版。
我们正在通过 SSL 在端口 443 上运行我们的 websocket 服务器。我们已经在正确的位置指定了 WebsocketMainInsecure.swf 文件(这些是跨域 ws 请求)的位置,并且我们正在将文件加载到通过 HTTPS 嵌入的 swfobject。
我们在安全组中为 EC2 实例打开了端口 843,并且跨源策略文件已成功通过 HTTP 呈现。它似乎没有通过 HTTPS 呈现(Chrome 引发 SSL 连接错误)。
我们尝试了两个版本的 WebsocketMainInsecure.swf 文件。第一个是 Socket.io 提供的文件,它是由 WebsocketMainInsecure.as 构建的,不包含该行
Security.allowInsecureDomain("*");
这会在WebSocket.__flash.setCallerUrl(location.href) 行引发错误SCRIPT16389: Unspecified error.。
我们认为这是因为 SWF 文件不允许 HTTPS 请求,因此我们将 WebSocketMainInsecure.swf 文件替换为在此 repo 中找到的文件:https://github.com/gimite/web-socket-js,因为它包含
Security.allowInsecureDomain("*");
actionscript 代码中的行。当我们使用它时,我们看到 flashsocket 连接在无限循环中不断断开和重新连接。我们在 Transport 原型的 onSocketError 函数中将错误跟踪到 socket.io 库中的 transport.js 文件。它抛出错误:
[Error: 139662382290912:error:1408F092:SSL routines:SSL3_GET_RECORD:data length too long:s3_pkt.c:503:]
我们甚至尝试将 socket.io 和 socket.io-client 都更新到 0.9.6 版本,但仍然出现 Access is denied 错误。
这个错误一直很难调试,现在我们不知道如何让 flashsockets 工作。我们想知道这是否与使用旧版本的 socket.io 有关,或者我们的策略文件服务器不接受 HTTPS 请求,或者甚至可能是来自网络的 WebSocketMainInsecure.swf 文件的方式- socket-js github repo 是相对于 socket.io-client 的期望构建的。
【问题讨论】:
-
这个问题最好在不同的论坛上问。 . . ServerFault 可能是一个不错的选择。这是a question from there about a similar error,这可能会给你一些线索。
-
@iND 看到了这个问题,但不确定它是否对我有帮助,你怎么看?
-
我在调试服务器交互方面的知识非常有限,这可能不是该领域专家最多的论坛。在更集中的论坛中,您可能会得到更好的回应。但是,这意味着这可能不是 Flash 问题。错误消息是相同的,并且行号与您的错误行仅相差一个,所以我认为解决方案 - 如果您忽略 LDAP 相关信息 - 可能在这里有一些影响。
-
另外,我想我会首先确保您尝试 web-socket-js troubleshooting guide 中的所有内容。
-
您可以尝试从同一个域托管 WebSocketMain.swf 和您的 html / 还是您已经这样做了?似乎无论如何都不推荐不安全的替代方案,这可能是网站安全问题。
标签: node.js ssl https socket.io ssl-certificate