我正在努力保护我的网站
一切都很好,直到我最终安装了 SSL 证书(来自 CloudFlare,不是自签名的)
所以问题是:当我通过 HTTP 打开我的网站时 - 一切正常,但是当我通过 https 打开它时 - 网站失去与主机的连接(需要工作)
在控制台中我可以看到:
socket.io-1.4.5.js:1 获取 https://188.226.131.219:8080/socket.io/?EIO=3&transport=polling&t=LlI-URk net::ERR_CONNECTION_CLOSED
如果我理解正确的话,这是端口的问题。使用HTTP端口80是可以的,使用https端口443有问题。有没有办法交换端口?
您可以尝试以下方法:
在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
});
我只是想把这个扔出去。这导致了我类似的错误,可能就是您正在寻找的错误。
socket.io 示例表示使用 IP 地址将客户端脚本连接到服务器。像这样的东西:
var socket = io.connect("https://123.45.6.78:443");
但是,一旦为 SSL 证书添加“A”记录,您需要使用“A”记录的主机名,而不是其指向的 IP 地址。像这样:
var socket = io.connect("www.mysite.com");
您的前端似乎位于 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 服务的正确端口。
我知道这有点旧,由 @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);
您需要在
.pem
目录中有 ssl
文件。
请根据您的要求正确设置cors
。