2012-07-20 119 views
38

我们试图让Socket.io flashsockets通过HTTPS/WSS在Internet Explorer 9中工作。闪存卡通过HTTP工作,但HTTPS给我们带来了问题。我们使用socket.io版本0.8.7和socket.io-client版本0.9.1-1。来自Socket.io的s3_pkt.c中的HTTPS错误“数据长度太长”

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

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

我们已经尝试了两个版本的WebsocketMainInsecure.swf文件。第一,不包括线

Security.allowInsecureDomain("*"); 

这引发错误SCRIPT16389: Unspecified error.WebSocket.__flash.setCallerUrl(location.href)线由Socket.io,这是建立关WebsocketMainInsecure.as提供的文件。

我们估计,这是因为SWF文件是不允许HTTPS请求,所以我们替换为一个在此回购发现WebSocketMainInsecure.swf文件:​​,因为它包括在动作的

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,客户端0.9.6版本,我们仍然得到了Access is denied错误。

这个错误一直非常难以调试,现在我们对如何让FlashSocket工作不知所措。我们想知道它是否可能与使用旧版本的socket.io有关,或者我们的策略文件服务器不接受HTTPS请求,或者甚至可能来自Web的WebSocketMainInsecure.swf文件 - socket-js github repo是根据socket.io-client期望的内容构建的。

+1

这可能会更好地问在不同的论坛。 。 。 ServerFault可能是一个不错的选择。这里是[从那里的一个类似的错误](http://serverfault.com/questions/402152/error-in-openssl-s-client-data-length-is-too-long),这可能会给你有些线索。 – iND 2012-07-20 03:55:44

+1

@iND看到这个问题,但不知道它是否对我有帮助,您怎么看? – user730569 2012-07-20 07:37:55

+1

我对调试服务器交互的知识非常有限,这可能不是该领域专家最多的论坛。您可以在更专注的论坛中获得更好的回应。但是,这意味着这可能不是Flash问题。错误消息是相同的,行号只有一个距离你的错误行,所以我会认为解决方案 - 如果你忽略LDAP相关信息 - 可能在这里有一些轴承。 – iND 2012-07-20 12:49:47

回答

1

我不确定天气的工作原理。但这里是我的主意/建议:

  1. 理念: 我认为你(可能)试图访问一个网址是太长。如果数据经常通过GET参数传输,则会发生这种情况。官方对URL的限制是低于512字节。

详细信息:http规范说协议行最多可以有512字节。如果服务器更长时间可能会拒绝请求,或者可能无法处理请求。具有GET请求的HTTP的第一行类似于需要适合512字节的“GET/path/to?param1 = data1 & param2 = data2 & ... HTTP/1.1”。对于POST请求没有这样的限制..

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

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

希望帮助...

1

尝试建立与OpenSSL的SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER(信贷史蒂芬·汉森和Jaaron安德森的OpenSSL邮件列表)。

+0

谢谢!是否需要使用该选项构建OpenSSL,或者我可以在运行's_client'设置选项时指定'-bugs'选项? – user730569 2012-10-02 07:09:52

+0

如果我重建它,我该如何指定这个选项? – user730569 2012-10-02 07:46:47