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

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

我最近开始为我自己构建的 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 制作的。所以我尝试使用 Flash Player 版本 10+ 中的 SecureSocket 进行连接,我相信。问题是闪存使用 DER X.509 证书格式。所以我使用 openssl 将 .PEM 文件转换为 .DER 文件并将其加载到闪存中。当我尝试连接到我的服务器时(都在本地主机上,想提一下以防它改变某些东西),我可以在我的服务器上看到连接尝试,但它立即关闭连接。

这是来自闪存的错误:

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);

这是关键() class:

package
{
 import flash.utils.ByteArray;

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

我试图查看 node js 以获取有关加载相同类型证书(DER 格式)的信息,但 node js 文档说它只接受 PEM 格式。而flash只接受DER格式。我想在每台机器上使用差异格式不能很好地协同工作,这可能是我的连接断开的原因。

反正从现在开始,我不知道该去哪里了。必须有一种方法可以在节点 js 中使用 DER 格式。我一直在寻找,找不到任何东西。

有人遇到过这个问题吗?

我终于做到了...哦,天哪,痛苦了 4 天。有很多棘手的部分,但那是我的证书设置不正确,我里面没有 dns 我必须将通用名称设置为本地主机......哦好吧 :( 另外我不知道 addbinarychain 是否会好起来,但是是的,它的工作原理,我没有尝试过,但没有建立连接。无论如何,除了到处都允许证书和闪存津贴之外,我可能已经做到了。我会慢慢来,然后再在线尝试真正的证书……我猜会再次发生一些问题哈哈