2012-07-20 60 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