Socket.io SSL错误

7ajki6be  于 2023-11-18  发布在  其他
关注(0)|答案(4)|浏览(142)

我在努力保护我的网站
一切都很好,直到我终于安装了SSL证书(从CloudFlare,而不是自签名的)
所以问题是:当我通过HTTP打开我的网站时-一切都很完美,但是当我通过HTTPS打开它时-网站正在失去与主机的连接(需要工作)
在控制台中,我可以看到:
socket.io-1.4.5.js:1 GET https://188.226.131.219:8080/socket.io/?EIO=3&transport=polling&t=LlI-URk net::ERR_CONNECTION_CLOSED
如果我理解正确,这里是一个端口的问题。使用HTTP端口80是可以的,使用HTTPS端口443有问题。有没有办法交换端口?

tquggr8v

tquggr8v1#

您可以尝试以下操作:
在node.js后端,将socket配置为:

var fs = require('fs');
var https = require('https');
var app = require('express')();

        var options = {
                key: fs.readFileSync('<.key location>'),
                cert: fs.readFileSync('<.cert location>')
        };
       var server = https.createServer(options, app);

server.listen(443, "0.0.0.0", function(){
        console.log('listening in port', 443);
});

字符串
在客户端应用程序中,您需要连接为:

socket = io.connect(<server_ip>, {
            secure: true
        });

z5btuh9x

z5btuh9x2#

我只是想把这个扔出去。这是造成我一个类似的错误,可能是你正在寻找的。
socket.io的例子说使用ip地址将客户端脚本连接到服务器。类似这样:

var socket = io.connect("https://123.45.6.78:443");

字符串
然而,一旦你为你的SSL证书添加了一个“A”记录,你需要使用“A”记录的主机名,而不是它指向的IP地址。像这样:

var socket = io.connect("www.mysite.com");

zujrkrfu

zujrkrfu3#

看起来你的前端是在http://188.226.131.219上,而你在http://188.226.131.219:8080上有一个WebSocket服务。
您已经将前端配置为使用SSL证书,并且可以在https://188.226.131.219上访问它,但是到您的WebSocket服务的链接可能取决于用于加载前端的协议和主机,因此如果您从https://188.226.131.219加载它,那么前端中的JS将尝试连接到https://188.226.131.219:8080,但是您的WebSocket服务在那里侦听HTTP请求,而不是HTTPS请求。
首先,您需要设置您的WebSocket服务也使用SSL证书,但在不同的端口(例如8443),然后您将不得不修改您的前端,以便能够理解它是如何加载的(使用HTTP或HTTPS)并为WebSocket服务找出正确的端口。

daolsyd0

daolsyd04#

我知道这有点旧,并回答了@stzoannos,但你真的不需要安装express让它工作。
我让它这样工作:

const server = require("https");
const { Server } = require("socket.io");

const io = new Server({
    cors: {
      origin: "*",
    },
  });

  const folder = path.join(__dirname, "ssl");
  const privateKey = fs.readFileSync(
    path.join(folder, "server_key.pem"),
    "utf8"
  );
  const certificate = fs.readFileSync(
    path.join(folder, "server_cert.pem"),
    "utf8"
  );

  const SSL_CONFIG= {
    key: privateKey,
    cert: certificate,
    ca: [certificate],
    requestCert: false,certificate, tested and it works
    rejectUnauthorized: false,
  };

  const WEB_SERVER = server.createServer(SSL_CONFIG);

  WEB_SERVER.listen(1102);
  io.listen(WEB_SERVER);

字符串
您需要在ssl目录下有.pem文件。请根据您的要求正确设置cors

相关问题