Docker 容器中的 NodeJS SocketIO 服务器的 ERR_SSL_VERSION_OR_CIPHER_MISMATCH

问题描述 投票:0回答:1

所以我在 docker 容器内有一个 nodejs socketio 服务器。服务器使用与站点相同的 URL(仅在端口 3001 上)以及相同的证书和密钥。但是,我收到此错误,我根本无法理解为什么,我尝试了从不同密码和 tls 版本到删除并重新开始的所有操作。服务器正在运行,正如我在 portainer 中看到的那样,如果我将其配置为 http 并在客户端将其称为 https,我会收到错误,但我将链接更改为 http 并且可以看到输出。在没有 ssl 的情况下使用 docker 在本地测试并工作。证书可用并且适用于网站的其他部分。如果这很重要的话,我还没有接触过 nginx 配置。

下面是我的index.js:


const fs = require("fs");
const https = require("https");
const http = require("http");
const express = require("express");
const { Server } = require("socket.io");
const path = require('path');


const app = express();

const keyPath = path.join(__dirname, 'ssl', 'mykey.key');
const certPath = path.join(__dirname, 'ssl', 'mycert.crt');


const readKeyFile = () => {
  try {
    console.log(fs.readFileSync(keyPath))
    return fs.readFileSync(keyPath);
  } catch (err) {
    console.error('Error reading SSL key file:', err.message);
    process.exit(1);
  }
};

const readCertFile = () => {
  try {
    console.log(fs.readFileSync(certPath))
    return fs.readFileSync(certPath);
  } catch (err) {
    console.error('Error reading SSL certificate file:', err.message);
    process.exit(1);
  }
};

const transports = ["websocket", "polling"]; 

const options = {
  key: readKeyFile(),
  cert: readCertFile(),
  transports: transports
};



const httpsServer = https.createServer(app, options);

const io = new Server(httpsServer, {
  cors: {
    origin: ["https://my-site.com"],
    methods: ["GET", "POST"],
  },
});


io.on("connection", (socket) => {
  console.log(`User Connected: ${socket.id}`);

  socket.on("join_room", (data) => {
    socket.join(data);
  });

  socket.on("send_message", (data) => {
    socket.to(data.room).emit("receive_message", data);
  });
});

httpsServer.listen(3001, () => {
  console.log("HTTP SERVER IS RUNNING");
});


这是我的dockerfile:


FROM node:18.8.0

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3001
EXPOSE 3002  

CMD ["node", "index.js"]

如有任何建议,我们将不胜感激

我尝试添加不同的密码、tls 版本、任何来源、http 服务器(导致混合内容错误)、传输,不幸的是没有任何效果。

node.js docker ssl socket.io ssl-certificate
1个回答
0
投票

我认为此问题是由于您的 ssl 证书无效造成的 您可能需要购买证书,但我个人使用certbot 对于我所有的开发项目

© www.soinside.com 2019 - 2024. All rights reserved.