我们试图通过HTTPS / WSS让Socket.io flashsockets在Internet Explorer 9中工作。 闪存卡通过HTTP工作,但HTTPS给我们带来了问题。 我们使用socket.io版本0.8.7和socket.io-client版本0.9.1-1。
我们通过端口443上的SSL运行我们的websocket服务器。我们已经在正确的位置指定了我们的WebsocketMainInsecure.swf文件的位置(这些是跨域ws请求),并且我们正在swfobject中embedded文件通过HTTPS。
我们在我们的EC2实例的安全组中打开了端口843,跨源策略文件成功通过HTTP呈现。 它似乎不通过HTTPS呈现(Chrome会引发SSL连接错误)。
我们已经尝试了两个版本的WebsocketMainInsecure.swf文件。 首先是由Socket.io提供的文件,它由WebsocketMainInsecure.as构build,不包含行
Security.allowInsecureDomain("*");
这会引发错误SCRIPT16389: Unspecified error. 在WebSocket.__flash.setCallerUrl(location.href)一行。
我们认为这是因为SWF文件不允许HTTPS请求,所以我们用在这个repo上find的文件replace了WebSocketMainInsecure.swf文件: 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:]
我们猜测这个错误可能与我们的ssl通配符子域名证书有关,但是我们不确定。
我们甚至尝试将socket.io和socket.io-client更新到版本0.9.6,而且我们仍然得到了访问被拒绝的错误。
这个错误非常难以debugging,现在我们不知道如何让FlashSocket工作。 我们想知道是否可能需要使用旧版本的socket.io,或者我们的策略文件服务器不接受HTTPS请求,或者甚至可能来自Web的WebSocketMainInsecure.swf文件, socket-js github repo是根据socket.io-client的期望build立的。
任何帮助是极大的赞赏!
它看起来像是通过了XSS控件,猜测SSL错误看起来像是因为你的websocket客户端没有连接到SSL websocket。
使用以下命令validation您的SSL websocket: openssl s_client -connect servername:websocketport
您应该看到SSL证书的转储以及它是否可信。 如果您知道如何复制您的websocket客户端,也可以发起请求。
另外,使用Wireshark / Tcpdump来validation哪些端口正在打开。 从Chrome的开发者工具“networking”部分和“控制台”中获得的转储可能certificate是有见地的。