我最近开始为我自己创建mmorpg im的服务器,我使用节点js作为服务器语言。我在网上搜索过,并认为使用TLS是进行身份验证和通过TCP / IP创建安全会话的方法。一切正常,我创建了一个证书,并使用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);
现在,我的游戏是用闪光灯制作的。所以我尝试连接使用FlashSocket 10+以上的SecureSocket我相信。问题是flash使用DER X.509证书格式。所以我使用openssl将.PEM文件转换为.DER文件并将其加载到flash中。当我尝试连接到我的服务器(这是在localhost上,想要提及它改变一些东西)时,我可以看到我的服务器上的连接尝试,但它立即关闭连接。
这是来自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插座,它就像一个魅力。
在我的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格式。而flash只接受DER格式。我想在每台机器上使用diff格式并不能很好地协同工作,这可能就是我的连接正在下降的原因。
无论如何,我不知道去哪里。必须有一种方法在节点js中使用DER格式。我一直在寻找,无法找到任何东西。
之前有人遇到过这个问题吗?
答案 0 :(得分:0)
我终于做到了......哦,天啊痛了4天。有很多棘手的部分,但那是我的证书没有正确设置,我没有在其中我必须设置通用名称为localhost ...哦好吧:(加上我不知道addbinarychain是否会好起来的,但是它的工作,我尝试没有和连接没有。无论如何,除了允许证书和闪存津贴到处都可能做到了。我会花时间在网上尝试真正的证书之前...猜一些问题会再次发生洛尔