Flex を使用して安全な Web ソケット (wss://) に接続しようとすると、セキュリティ サンドボックス違反エラーが発生します。
完全なエラー メッセージは次のとおりです。
*** Security Sandbox Violation ***
Connection to foo.bar:8443 halted - not permitted from https://foo.bar:8443/foo/foo-html/Main.swf
Security Error: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Security sandbox violation: https://foo.bar.com:8443/foo/foo-html/Main.swf cannot load data from come2play.xpogames.com:8443."]
接続エラー: エラー #2048: セキュリティ サンドボックス違反: https://foo.bar.com:8443/foo/bar-html/Main.swfは foo.bar.com:8443 からデータを読み込めません。Websocket が閉じられました。
使用しようとしているブラウザは FireFox 20.0.1 です。
wss://
ポートでプロトコルを使用して同じアドレスに接続するJavaScriptクライアントを作成しましたが、8443
問題なく接続されました。
flex アプリケーションがロードできるように、tomcat の ROOT ディレクトリの下に crossdomain.xml ファイルを含めました。crossdomain.xml ファイルの内容は次のとおりです。
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
firebug で確認したところ、crossdomain.xml ファイルが正しく読み込まれていることがわかりました。
を使用して crossdomain.xml ファイルの場所を手動で指定しようとしました
flash.system.Security.loadPolicyFile("{Url to my crossdomain.xml file on the SSL virtual root}");
しかし、私は同じ結果を得ました。
この crossdomain.xml でさまざまな構成のバリエーションも試しました。たとえばsecure="yes"
、使用するポートを指定しようとしましたが、何も機能せず、常にセキュリティ サンドボックス違反が発生しました。
mms.cfg ファイルで DisableSockets = 1 ディレクティブがオンになっている可能性があることはわかっていますが、私のシステムにはそのようなファイルがありません。私は Linux Gentoo を使用しています。
面白いことに、私のシステムは私の WebSocket と同じドメインと同じポートにあるのです!
実際には、たとえばapps.facebook.com/fooにあるFacebookアプリケーションです..そのキャンバスページは、たとえばfoo.bar.com:8443です
セキュア Web ソケット アドレスも wss://foo.bar.com:8443 です。そもそもなぜクロスドメインに対処する必要があるのか よくわかりません!
この問題に関する情報をいただければ幸いです。
ありがとうございました