通过TLS连接发送跨域策略以通过节点js进行刷新

我有一个客户端在闪存as3。 我有2个服务器,一个主要用于Flash客户端和一个套接字策略服务器。

例如,我在端口843上运行套接字策略服务器,在任何端口X上运行我的客户端。

现在,当我连接我的Flash客户端,使用这个:

Security.loadPolicyFile("xmlsocket://domain.com:port"); SecureSocket.connect(ip, port); 

它实际上首先连接到我的策略套接字服务器,发送一个策略文件请求行,并接收我使用我的服务器发送的那个看起来像这样的:

  tls.createServer(options, function(sock) { sock.on('data', function(data) { console.log('Data receveid: '.cyan + data + ' from ' + sock.remoteAddress); if (data == "<policy-file-request/>\0") { sock.write('<?xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy><site-control permitted-cross-domain-policies="all"/><allow-access-from domain="*"></cross-domain-policy console.log('Sent policy file to: '.green + sock.remoteAddress); } ... 

之后,连接自动closures。 然后尝试连接到我的真实服务器,并再次发送到服务器的策略文件请求线,然后连接closures。 从现在开始,我真的不知道该怎么做,一直试图整天在网上search。 任何人都知道我错过了什么?

好的,我终于得到它的工作。 首先,我想要从我的客户端到我的游戏的SSL连接。

  • 在Flash IDE中本地尝试它是好的,
  • 但是,在Flashdebugging器或从网站执行它不工作,因为它试图访问一个套接字策略服务器(这是一个注册港口,从端口843端口)。

所以我需要一个策略套接字服务器来处理这个端口,发现一些在python和perl中写的adobe网站上。 忘记他们,他们不会在这种情况下工作。

因为我试图访问SSL中的服务器,所以我还需要一个SSL策略服务器。
既然网上没有,我写了一个简单的:

 var tls = require('tls'); var fs = require('fs'); var options = { key: fs.readFileSync('/etc/ssl/private/yourserver.key'), cert: fs.readFileSync('/etc/ssl/certs/yourserver.crt'), }; var HOST = 'YOURSERVERIP'; var PORT = 843; tls.createServer(options, function(sock) { sock.on('data', function(data) { console.log('Policy Server Request: ' + data); if (data.indexOf('policy') !== -1) { console.log("Policy Server: sending regulation file"); sock.write('<?xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"><!-- Policy file for xmlsocket://MYDOMAIN.com --><cross-domain-policy><allow-access-from domain="*" to-ports="*" /><allow-access-from domain="*" to-ports="1-65535" /><allow-access-from domain="MYDOMAIN.com" to-ports="MYGAMEPORT" /><allow-access-from domain="MYIP" to-ports="*" /></cross-domain-policy>\0'); } else { console.log("Policy Server: unknown request"); } }); sock.on('clientError', function(exception) { console.log('' + data); }); sock.on('close', function(data) { console.log('CONNECTION CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort); }); sock.on('error', function(err) { console.log('\n' + HOST +':'+ err); }); }).listen(PORT, HOST); console.log('\nPolicy Server listening on ' + HOST +':'+ PORT); 

我在允许访问域的表单中疯了,因为我有一个安全沙箱侵犯与减less,所以我把这一切。 我将在稍后清理。

正如你所看到的, 我不得不在发送策略结束时添加一个\0 ,否则Flash将不会接受它

这两天浪费了。 而且我仍然不明白为什么Adobe会在Flash和世界之间如此艰难地联系起来。 编程套接字时从来没有在别处看到这种策略。