我最近开始自己创建用于mmorpg im的服务器,我使用node js作为服务器语言。我在网上搜索后发现,使用TLS是进行身份验证和通过TCP / IP创建安全会话的方式。一切正常,我创建了一个证书,并使用发现的Web上的一些命令使用openssl对其进行了自签名,它为我提供了可与服务器一起使用的密钥和证书。我尝试与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);


现在,我的游戏是用Flash制作的。因此,我相信我会使用Flash Player 10+版中随附的SecureSocket进行连接。问题是闪存使用DER X.509证书格式。因此,我使用openssl将.PEM文件转换为.DER文件,并将其加载到Flash中。当我尝试连接到我的服务器(都在本地主机上,想提一下以防万一它有所更改)时,我可以看到服务器上的连接尝试,但它立即关闭了连接。

这是闪存中的错误:

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."]


但是就像我说的那样,即使错误表明主机无效,我也可以看到连接服务器端。我在没有TLS套接字的情况下也做同样的事情,它就像一个魅力。

在我的闪存代码中,我使用了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格式。并且Flash仅接受DER格式。而且我猜想在每台计算机上使用diff格式不能很好地协同工作,这可能就是为什么我的连接断开的原因。

无论如何,从现在开始,我不知道要去哪里。必须有一种在节点js中使用DER格式的方法。我一直在搜索,找不到任何东西。

有人曾经遇到过这个问题吗?

最佳答案

我终于做到了……天哪,四天的痛苦。有很多棘手的部分,但是那是我的证书设置不正确,我没有dns,我不得不将通用名设置为localhost ...哦,好吧:(另外,我不知道addbinarychain是否会正常,但是是的,我尝试了没有连接的情况,无论如何,除了在各处允许使用证书和闪存津贴外,我还花了一些时间在网上尝试真正的证书...我猜这会再次发生问题大声笑

关于javascript - 使用TLS(SSL)从Flash v11 +到nodejs的连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35566759/

10-16 17:56