2012-07-20 18 views
38

HTTPS/WSS経由でInternet Explorer 9でSocket.ioのフラッシュソケットを動作させようとしています。フラッシュソケットはHTTP上で動作しますが、HTTPSは私たちに問題を与えています。私たちはsocket.ioバージョン0.8.7とsocket.io-clientバージョン0.9.1-1を使用しています。Socket.ioのs3_pkt.cのHTTPSエラー "data length too long"

Websocketサーバーは、ポート443でSSL経由で実行されています.WebSocketMainInsecure.swfファイルの場所(これらはクロスドメインのws要求です)が正しい場所に指定されており、ファイルをロードしていますHTTPSに埋め込まれたswfobjectの中にあります。

EC2インスタンスのセキュリティグループにポート843を開き、クロスオリジンポリシーファイルがHTTP経由で正常にレンダリングされています。 HTTPSでレンダリングされないようです(ChromeはSSL接続エラーをスローします)。

WebsocketMainInsecure.swfファイルの2つのバージョンを試しました。最初は、これはWebSocket.__flash.setCallerUrl(location.href)線にエラーSCRIPT16389: Unspecified error.をスローライン

Security.allowInsecureDomain("*"); 

を含まないWebsocketMainInsecure.asのオフ構築されSocket.io、によって提供されるファイルです。

私たちは、SWFファイルがHTTPS要求を許可されなかったので、それがあった考え出したので、私たちは、このレポで見つかったものでWebSocketMainInsecure.swfファイルを置き換える:それはActionScriptで

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:] 

私たちも、バージョン0.9.6にsocket.ioとsocket.io-クライアントの両方を更新しようと、我々はまだAccess is deniedエラーを得ました。

このエラーはデバッグするのが非常に難しく、現在ではフラッシュソケットを動作させる方法が失われています。古いバージョンのsocket.ioを使用する必要があるかどうか、またはポリシーファイルサーバーがHTTPS要求を受け入れないか、WebSocketMainInsecure.swfファイルがHTTPS要求を受け入れないことが考えられます。 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

+1

@iNDその質問を見たが、それが私を助けるかどうかはわからない、どう思いますか? – user730569

+1

私は、サーバーのやりとりのデバッグに関する知識が非常に限られていますが、これはその分野の専門家が多いフォーラムではないかもしれません。より焦点を絞ったフォーラムでより良い回答を得ることができます。ただし、これはFlashの問題ではない可能性があります。エラーmsgは同じで、行番号はエラー行から1つだけ離れているので、LDAP関連情報を無視すると解決策があると思います。 – iND

答えて

1

天気が良いです。しかし、ここで私のアイデア/提案です:

  1. アイデア: は、私はあなたが(おそらく)長すぎるURLにアクセスしようとしたことを前提としています。これは、データがGET-Parametersを使用して頻繁に送信される場合に発生します。 URLの正式な制限は512バイト未満です。

詳細:HTTPの仕様によれば、プロトコル行は512バイト以下であることがあります。長い場合、サーバーは要求を拒否するか、要求を処理できない可能性があります。 GET-requetを持つ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.解決策:GET-Requestの代わりにPOSTを使用して、より長いデータセットを送信してください。これが機能するかどうかを確認してください... 2.使用しているサーバでopenssl-installationまたはlibopensslを置き換えてください。おそらく壊れているか古いですか? opensslの開発者からいくつかの助けを要求する 3.お試しください...

希望に役立ちます...

1

はSSL_OP_MICROSOFT_BIG_SSLV3_BUFFERとのOpenSSL(OpenSSLのメーリングリストからのスティーブン・ヘンソンとJaaronアンダーソンへの信用)を構築してみます。

+0

ありがとう!そのオプションでOpenSSLをビルドする必要がありますか、 '' s_client'を実行してオプションを設定するときに '-bugs'オプションを指定するだけでよいですか? – user730569

+0

それを再構築すると、このオプションをどのように指定するのですか? – user730569