39

HTTPS/WSS を介して Internet Explorer 9 で Socket.io 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 接続エラーをスローします)。

2 つのバージョンの WebsocketMainInsecure.swf ファイルを試しました。1 つ目は、WebsocketMainInsecure.as から構築された Socket.io によって提供されるファイルで、次の行が含まれていません。

Security.allowInsecureDomain("*");

SCRIPT16389: Unspecified error.これにより、行にエラーがスローされますWebSocket.__flash.setCallerUrl(location.href)

SWF ファイルが HTTPS リクエストを許可していないことが原因であると判断したため、WebSocketMainInsecure.swf ファイルを次のリポジトリにあるものに置き換えました: https://github.com/gimite/web-socket-js

Security.allowInsecureDomain("*");

actionscript コードの行。これを使用すると、フラッシュソケット接続が無限ループで切断と再接続を繰り返していることがわかりました。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エラーが発生しました。

このエラーはデバッグが非常に難しく、現在、フラッシュソケットを機能させる方法について途方に暮れています。古いバージョンの socket.io を使用しているためか、ポリシー ファイル サーバーが HTTPS 要求を受け入れないためか、WebSocketMainInsecure.swf ファイルが Web からsocket-js github リポジトリは、socket.io-client が期待するものに対して相対的に構築されました。

4

2 に答える 2

1

それが機能するかどうかはわかりません。しかし、ここに私の考え/提案があります:

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

詳細: HTTP 仕様では、プロトコル行は最大 512 バイトであると規定されています。それ以上経過すると、サーバーがリクエストを拒否するか、リクエストを処理できなくなる可能性があります。GET-requet を含む HTTP の最初の行は、"GET /path/to?param1=data1¶m2=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. 解決策: GET リクエストの代わりに POST を使用して、より長いデータセットを送信します。これが機能するかどうかを確認してください... 2.使用するサーバーでopenssl-installationまたはlibopensslを置き換えてみてください。おそらく壊れているか、古くなっていますか?3. openssl 開発者に助けを求めてみてください...

それが役立つことを願っています...

于 2012-08-14T16:58:56.040 に答える
1

SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER を使用して OpenSSL を構築してみてください (OpenSSL メーリング リストの Steven Henson と Jaaron Anderson の功績によるものです)。

于 2012-10-01T17:08:27.157 に答える