0

我正在尝试使用 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,并且连接得很好。

我在我的 tomcat 的 ROOT 目录下包含了一个 crossdomain.xml 文件,因此 flex 应用程序将能够加载它。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 位于同一个域和同一个端口上!

它实际上是一个 facebook 应用程序,例如位于 apps.facebook.com/foo 上.. 并且该画布页面例如 foo.bar.com:8443

然后安全 Web 套接字地址也是 wss://foo.bar.com:8443!所以我真的不明白为什么我首先需要处理跨域!

任何有关该问题的信息将不胜感激!

谢谢你

4

1 回答 1

0

我安装了http://code.google.com/p/flashpolicyd/

它在端口 843 上打开一个服务器,该服务器实际上为每个请求提供一个 poilcy 文件。您有一个接受每个主机和每个端口的策略文件,您需要根据需要对其进行修改。

然后您需要在弹性代码中使用 xmlsocket:// 协议将策略文件指向该地址。

    Security.loadPolicyFile("xmlsocket://hostname:843");

就是这样!

于 2013-07-14T11:35:15.580 回答