[英]Socket.io SSL error
我正在努力保护我的网站
在我最终安装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有问题。 有没有办法交换端口?
您可以尝试以下方法:
在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
});
好像你的前端是http://188.226.131.219和你有一个WebSocket的服务http://188.226.131.219:8080 。
您已将前端配置为使用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服务的正确端口。
我只是想把它扔出去。 这导致了我一个类似的错误,可能是你正在寻找的。
socket.io示例说使用ip地址将客户端脚本连接到服务器。 像这样的东西:
var socket = io.connect("https://123.45.6.78:443");
但是,一旦为SSL证书添加“A”记录,就需要使用“A”记录的主机名,而不是它所指向的IP地址。 像这样:
var socket = io.connect("www.mysite.com");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.