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

Connection from flash v11+ to to nodejs using TLS (SSL)

本文关键字:v11+ 连接 nodejs 闪存 TLS SSL 使用      更新时间:2023-09-26

我最近开始为自己构建的mmorpg im创建一个服务器,我使用node 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);

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

这是闪存的错误:

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格式。并且闪存只接受DER格式。而且我想在每台机器上使用diff格式不能很好地协同工作,这可能是我的连接断开的原因。

反正从现在开始,我不知道该去哪里。一定有办法在节点 js 中使用 DER 格式。我一直在四处寻找,什么也找不到。

以前有人解决过这个问题吗?

我终于做到了...哦,我的天哪,4天的痛苦。有很多棘手的部分,但那是我的证书设置不正确,我没有 dns,我必须将通用名称设置为 localhost......哦,:(另外,我不知道addbinarychain是否会正常,但是是的,它可以工作,我尝试过没有并且没有建立连接。无论如何,除了允许证书和闪光津贴之外,可能做到了。在尝试在线真实证书之前,请花点时间...猜猜一些问题会再次发生,哈哈