来自Socket.io的s3_pkt.c中的HTTPS错误“数据长度太长”

时间:2012-07-20 01:06:48

标签: node.js ssl https socket.io ssl-certificate

我们正在努力让Socket.io flashsockets通过HTTPS / WSS在Internet Explorer 9中运行。 flashsockets通过HTTP工作,但HTTPS给我们带来了麻烦。我们使用的是socket.io版本0.8.7和socket.io-client版本0.9.1-1。

我们在端口443上通过SSL运行我们的websocket服务器。我们在正确的位置指定了我们的WebsocketMainInsecure.swf文件的位置(这些是跨域ws请求),我们正在加载文件swfobject嵌入了HTTPS。

我们在安全组中为我们的EC2实例打开了端口843,并且通过HTTP成功呈现了交叉源策略文件。它似乎不通过HTTPS呈现(Chrome引发SSL连接错误)。

我们尝试了两个版本的WebsocketMainInsecure.swf文件。第一个是Socket.io提供的文件,它是由WebsocketMainInsecure.as构建的,不包含该行

Security.allowInsecureDomain("*");

这会在SCRIPT16389: Unspecified error.行抛出错误WebSocket.__flash.setCallerUrl(location.href)

我们认为这是因为SWF文件不允许HTTPS请求,因此我们将WebSocketMainInsecure.swf文件替换为此repo上的文件:https://github.com/gimite/web-socket-js,因为它包含

Security.allowInsecureDomain("*");
动作脚本代码中的

行。当我们使用它时,我们看到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请求,或者甚至可能是来自Web的WebSocketMainInsecure.swf文件的方式 - socket-js github repo是相对于socket.io-client期望的那样构建的。

2 个答案:

答案 0 :(得分:1)

我不确定它的工作天气。但这是我的想法/建议:

  1. 思想: 我假设你(可能)试图访问一个太长的URL。如果通常通过GET参数传输数据,则会发生这种情况。 URL的官方限制低于512字节。
  2. 详细信息:HTTP规范说协议行最多可以是512字节。如果更长,则服务器可能拒绝该请求或者可能无法处理该请求。带有GET-requet的HTTP中的第一行就像“GET / path / to?param1 = data1& param2 = data2& ... HTTP / 1.1”,它需要适合512字节。对于POST请求,没有这样的限制..

    但是你的错误似乎来自某些SSL实现(openSSL?):在第503行引用s3_pkt.c(我在这里找到了这样的文件:http://www.opensource.apple.com/source/OpenSSL/OpenSSL-7.1/openssl/ssl/s3_pkt.c)但似乎有所不同;我不知道细节,我只是猜测:我可以想到openSSL实现对长GET请求有一些有限的支持(因为它们不符合HTTP)并且只是以这种方式拒绝它们......

    我现在看到了这些可能性: 1.解决方案:使用POST而不是GET-Requests来传输更长的数据集。看看这是否有效...... 2.尝试在所使用的服务器上替换openssl-installation或libopenssl;它可能已经破损或过时了? 3.尝试向openssl开发人员请求一些帮助......

    希望有帮助...

答案 1 :(得分:1)

尝试使用SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER构建OpenSSL(来自OpenSSL邮件列表的Steven Henson和Jaaron Anderson)。