[英]ERR_SSL_PROTOCOL_ERROR - Socket.io and Node.js
我正在使用 Node.js 服务器并使用 Socket.io 通过 Socket 管理连接,但我遇到了 SSL 证书问题。 很多用户可以正常访问 Node.js 服务器,但其他用户无法访问,他们收到此错误:
当我设置我的服务器时,我有这个 SSL 选项:
var privateKey = fs.readFileSync('/root/cert/key.key', 'utf8').toString();
var certificate = fs.readFileSync('/root/cert/cert.crt', 'utf8').toString();
var ca = fs.readFileSync('/root/cert/ca.crt').toString();
var credentials = { key: privateKey, cert: certificate, ca: ca };
var app = express();
var httpsServer = https.createServer(credentials, app);
var io = require('socket.io')(httpsServer);
有人知道如何解决这个错误吗? 问题是只有部分用户收到此错误。
好吧,据我所知,您缺少 https 服务器的侦听端口。
var httpsServer = https.createServer(credentials, app).listen(<port>);
我对ERR_SSL_PROTOCOL_ERROR
有很多麻烦,我必须给你我的解决方案
NodeJS 服务器16.15.0
与"socket.io": "2.4.1"
(我假设它适用于其他 NodeJS 版本)
const path = require("path");
const fs = require("fs");
const io = require("socket.io")();
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 optSsl = {
key: privateKey,
cert: certificate,
ca: [certificate],
requestCert: false, // put true if you want a client certificate, tested and it works
rejectUnauthorized: false,
};
const server = require("https");
const webServer = server.createServer(optSsl);
webServer.listen(8025); // port number
io.listen(webServer);
io.on("connection", (client) => {
/*...*/
});
/*...*/
带有“ngx-socket-io”的Angular 10.2.7
"ngx-socket-io": "3.2.0"
(我认为它也适用于其他Angular版本)
import { Socket, SocketIoConfig } from 'ngx-socket-io';
/*...*/
socket: Socket;
socketConfig: SocketIoConfig;
socketConfig = {
url: "https://myserver:8025",
options: {},
};
socket = new Socket(socketConfig);
socket.connect();
看起来您的 apache2 配置不正确。 检查您是否启用了配置文件:
a2ensite default-ssl
然后重启服务器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.