使用TLS(SSL)从flash v11 +连接到nodejs

我最近开始创build一个服务器,用于我自己构build的mmorpg,我使用节点js作为服务器语言。 我在网上search了一下,发现使用TLS是authentication和通过TCP / IP创build安全会话的方法。 一切工作正常,我创build了一个证书,并使用openssl自己用我在网上find的一些命令对它进行了签名,它给了我可以用在我的服务器上的密钥和证书。 我尝试用openssl连接,一切正常。 js使用的证书节点是PEM格式。

这就是我使用的服务器代码:

var tls = require('tls'); var fs = require('fs'); var options = { key: fs.readFileSync(__dirname + '/server.key'), cert: fs.readFileSync(__dirname + '/server.crt'), //requestCert: true, //rejectUnauthorized: false, }; tls.createServer(options, function(sock) { //stuff here }).listen(PORT, HOST); 

现在,我的游戏是闪光灯。 所以我尝试连接使用SecureSocket进来的Flash Player版本10+我相信。 问题是闪存使用DER X.509证书格式。 所以我使用openssl将.PEM文件转换为.DER文件,并将其加载到Flash中。 当我尝试连接到我的服务器(这是两个本地主机,想提一下它改变的东西),我可以看到连接尝试在我的服务器,但它立即closures连接。

这是来自闪存的错误:

 Secure socket supported: true ioErrorHandler: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2031: Erreur de socket. URL: localhost"] securityErrorHandler: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Violation de la sécurité Sandbox : file:///C|/Users/DevilCult/Desktop/Flash%20Game/tcp%20test/Untitled%2D1.swf ne peut pas charger de données à partir de localhost:8089."] 

但就像我说的,即使错误表示主机无效,我也可以看到连接服务器端。 我做同样没有TLSsockets,它的工作就像一个魅力。

在我的Flash代码中,我使用addBinaryChainBuildingCertificate像这样:

 secureSocket.addBinaryChainBuildingCertificate(new key(), true); secureSocket.connect("localhost", 8089); 

这是key()类:

 package { import flash.utils.ByteArray; [Embed(source="server.der", mimeType="application/octet-stream")] public class key extends ByteArray { } } 

我尝试在节点js周围查看加载相同种类的证书(DER格式)的信息,但节点js文档说它只接受PEM格式。 而闪存只接受DER格式。 而且我想在每台机器上使用diff格式并不能很好地协同工作,这就是为什么我的连接正在下降。

无论如何,我不知道该去哪里。 必须有一种在节点js中使用DER格式的方法。 我一直在四处搜寻,找不到任何东西。

任何人都曾经遇到过这个问题?

我终于做到了…哦,我的天哪4天的痛苦。 有很多棘手的部分,但那是我的证书没有正确设置,我没有在其中的DNS,我不得不设置共同的名字作为localhost …哦:(另外我不知道如果addbinarychain会没事的,但是是的,它的工作,我tryed没有和连接isnt。无论如何,除了准许的证书和闪光补贴到处都可能做到了。我花了我的时间才尝试在网上一个真正的证书…猜一些问题会再次发生大声笑